diff --git a/app/controllers/course/feedback.php b/app/controllers/course/feedback.php
index cd970a03e4190fdc1718b334a0888d22cd3b7e73..dec20009bbbab084cbe3c35ffb241717f4bc5bb9 100644
--- a/app/controllers/course/feedback.php
+++ b/app/controllers/course/feedback.php
@@ -71,7 +71,7 @@ class Course_FeedbackController extends AuthenticatedController
             'range_type'        => $range_type,
             'results_visible'   => 1,
             'commentable'       => 1,
-            'mode'              => 1
+            'mode'              => FeedbackElement::MODE_5STAR_RATING,
         ]);
     }
 
@@ -83,12 +83,12 @@ class Course_FeedbackController extends AuthenticatedController
         if (!Feedback::hasRangeAccess($range_id, $range_type)) {
             throw new AccessDeniedException();
         } elseif ($this->create_perm) {
-            if(Request::get('comment_only') === 1) {
-                $mode = 0;
+            if (Request::bool('comment_only')) {
+                $mode = FeedbackElement::MODE_NO_RATING;
                 $commentable = 1;
             } else {
-                $mode           = intval(Request::get('mode'));
-                $commentable    = intval(Request::get('commentable'));
+                $mode           = Request::int('mode', FeedbackElement::MODE_NO_RATING);
+                $commentable    = Request::bool('commentable');
             }
             $feedback = FeedbackElement::build([
                 'range_id'          => $range_id,
diff --git a/app/controllers/course/room_requests.php b/app/controllers/course/room_requests.php
index 464404fac1890b11f9a9beefa0007023f04329d3..1f06afef8009d4e791d54536db275d2143a7ac3f 100644
--- a/app/controllers/course/room_requests.php
+++ b/app/controllers/course/room_requests.php
@@ -583,7 +583,7 @@ class Course_RoomRequestsController extends AuthenticatedController
         }
 
         $this->preparation_time = intval($this->request->preparation_time / 60);
-        $this->reply_lecturers = $this->request->reply_recipients === 'lecturer';
+        $this->reply_lecturers = $this->request->reply_recipients === ResourceRequest::REPLY_LECTURER;
         $this->comment = $this->request->comment;
 
         $_SESSION[$request_id]['search_by'] = $this->selected_room ? 'roomname' : 'category';
@@ -612,9 +612,9 @@ class Course_RoomRequestsController extends AuthenticatedController
             $this->request->comment = Request::get('comment');
 
             if (Request::get('reply_lecturers')) {
-                $this->request->reply_recipients = 'lecturer';
+                $this->request->reply_recipients = ResourceRequest::REPLY_LECTURER;
             } else {
-                $this->request->reply_recipients = 'requester';
+                $this->request->reply_recipients = ResourceRequest::REPLY_REQUESTER;
             }
             $this->request->category_id = $_SESSION[$request_id]['room_category_id'] ?: $this->request->category_id;
 
diff --git a/app/controllers/resources/booking.php b/app/controllers/resources/booking.php
index 145a885a2a5ba5b4e6470ce17d8be594ae73f62d..0e09d8c73fa18983a46c67cc946f143208c79b6d 100644
--- a/app/controllers/resources/booking.php
+++ b/app/controllers/resources/booking.php
@@ -209,7 +209,7 @@ class Resources_BookingController extends AuthenticatedController
 
     protected function sendLockBookingMail(ResourceBooking $booking)
     {
-        if ($booking->booking_type != '2') {
+        if ($booking->booking_type != ResourceBooking::TYPE_LOCK) {
             return false;
         }
 
@@ -306,7 +306,7 @@ class Resources_BookingController extends AuthenticatedController
         $preparation_time = 0,
         $description = '',
         $comment = '',
-        $booking_type = '0',
+        $booking_type = ResourceBooking::TYPE_NORMAL,
         $assigned_user = null,
         $repetition_interval = null,
         $notification_enabled = false,
@@ -328,7 +328,7 @@ class Resources_BookingController extends AuthenticatedController
             if ($included_room_parts) {
                 //Check if there are identical bookings in the other room parts:
                 foreach ($included_room_parts as $room_part) {
-                    if (($booking_type == '2') && $overwrite_bookings) {
+                    if ($booking_type == ResourceBooking::TYPE_LOCK && $overwrite_bookings) {
                         //Create a new booking:
                         $room_part->createBooking(
                             $user,
@@ -351,7 +351,7 @@ class Resources_BookingController extends AuthenticatedController
                             $comment,
                             $booking_type,
                             (
-                                $booking_type == '2'
+                                $booking_type == ResourceBooking::TYPE_LOCK
                                 ? $overwrite_bookings
                                 : false
                             )
@@ -396,7 +396,7 @@ class Resources_BookingController extends AuthenticatedController
                                 $comment,
                                 $booking_type,
                                 (
-                                    $booking_type == '2'
+                                    $booking_type == ResourceBooking::TYPE_LOCK
                                     ? $overwrite_bookings
                                     : false
                                 )
@@ -430,7 +430,7 @@ class Resources_BookingController extends AuthenticatedController
                 try {
                     //Enable overwriting of bookings if it is a lock booking:
                     $a->store(
-                        $booking_type == '2'
+                        $booking_type == ResourceBooking::TYPE_LOCK
                         ? $overwrite_bookings
                         : false
                     );
@@ -465,7 +465,7 @@ class Resources_BookingController extends AuthenticatedController
                     $comment,
                     $booking_type,
                     (
-                        $booking_type == '2'
+                        $booking_type == ResourceBooking::TYPE_LOCK
                         ? $overwrite_bookings
                         : false
                     )
@@ -475,7 +475,11 @@ class Resources_BookingController extends AuthenticatedController
                 $result['errors'] = [$e->getMessage()];
             }
 
-            if ($booking && ($booking_type == '2') && $notification_enabled) {
+            if (
+                $booking
+                && $booking_type == ResourceBooking::TYPE_LOCK
+                && $notification_enabled
+            ) {
                 $this->sendLockBookingMail($booking);
             }
 
@@ -509,7 +513,7 @@ class Resources_BookingController extends AuthenticatedController
                                 $comment,
                                 $booking_type,
                                 (
-                                    $booking_type == '2'
+                                    $booking_type == ResourceBooking::TYPE_LOCK
                                     ? $overwrite_bookings
                                     : false
                                 )
@@ -536,7 +540,7 @@ class Resources_BookingController extends AuthenticatedController
 
 
     protected function displayAssignResultMessages(
-        $booking_type = 0,
+        $booking_type = ResourceBooking::TYPE_NORMAL,
         $booking_count = 0,
         $errors = [],
         $room_part_errors = []
@@ -545,12 +549,12 @@ class Resources_BookingController extends AuthenticatedController
         if ($booking_count > 0) {
             if ($errors) {
                 //Bookings could not be saved.
-                if ($booking_type == '1') {
+                if ($booking_type == ResourceBooking::TYPE_RESERVATION) {
                     PageLayout::postWarning(
                         _('Es konnten nicht alle Reservierungen gespeichert werden!'),
                         $errors
                     );
-                } elseif ($booking_type == '2') {
+                } elseif ($booking_type == ResourceBooking::TYPE_LOCK) {
                     PageLayout::postWarning(
                         _('Es konnten nicht alle Sperrbuchungen gespeichert werden!'),
                         $errors
@@ -563,13 +567,13 @@ class Resources_BookingController extends AuthenticatedController
                 }
             } elseif ($room_part_errors) {
                 //Room parts could not be assigned.
-                if ($booking_type == '1') {
+                if ($booking_type == ResourceBooking::TYPE_RESERVATION) {
                     $text = ngettext(
                         'Die Reservierung wurde gespeichert, aber es traten Fehler beim Reservieren der anderen Raumteile auf:',
                         'Die Reservierungen wurden gespeichert, aber es traten Fehler beim Reservieren der anderen Raumteile auf:',
                         $booking_count
                     );
-                } elseif ($booking_type == '2') {
+                } elseif ($booking_type == ResourceBooking::TYPE_LOCK) {
                     $text = ngettext(
                         'Die Sperrbuchung wurde gespeichert, aber es traten Fehler beim Sperren der anderen Raumteile auf:',
                         'Die Sperrbuchungen wurden gespeichert, aber es traten Fehler beim Sperren der anderen Raumteile auf:',
@@ -589,7 +593,7 @@ class Resources_BookingController extends AuthenticatedController
                 );
             } else {
                 //Everything went fine:
-                if ($booking_type == '1') {
+                if ($booking_type == ResourceBooking::TYPE_RESERVATION) {
                     PageLayout::postSuccess(
                         ngettext(
                             'Die Reservierung wurde gespeichert.',
@@ -597,7 +601,7 @@ class Resources_BookingController extends AuthenticatedController
                             $booking_count
                         )
                     );
-                } elseif ($booking_type == '2') {
+                } elseif ($booking_type == ResourceBooking::TYPE_LOCK) {
                     PageLayout::postSuccess(
                         ngettext(
                             'Die Sperrbuchung wurde gespeichert.',
@@ -652,21 +656,21 @@ class Resources_BookingController extends AuthenticatedController
             $only_one_room = count($this->resources) == 1;
 
             if ($only_one_room) {
-                if ($this->booking_type == 3) {
+                if ($this->booking_type == ResourceBooking::TYPE_PLANNED) {
                     PageLayout::setTitle(
                         sprintf(
                             _('%s: Neue geplante Buchung'),
                             $this->resources[0]->getFullName()
                         )
                     );
-                } elseif ($this->booking_type == 2) {
+                } elseif ($this->booking_type == ResourceBooking::TYPE_LOCK) {
                     PageLayout::setTitle(
                         sprintf(
                             '%s: Neue Sperrbuchung',
                             $this->resources[0]->getFullName()
                         )
                     );
-                } elseif ($this->booking_type == 1) {
+                } elseif ($this->booking_type == ResourceBooking::TYPE_RESERVATION) {
                     PageLayout::setTitle(
                         sprintf(
                             '%s: Neue Reservierung',
@@ -682,15 +686,15 @@ class Resources_BookingController extends AuthenticatedController
                     );
                 }
             } else {
-                if ($this->booking_type == 3) {
+                if ($this->booking_type == ResourceBooking::TYPE_PLANNED) {
                     PageLayout::setTitle(
                         _('Neue geplante Buchung')
                     );
-                } elseif ($this->booking_type == 2) {
+                } elseif ($this->booking_type == ResourceBooking::TYPE_LOCK) {
                     PageLayout::setTitle(
                         _('Neue Sperrbuchung')
                     );
-                } elseif ($this->booking_type == 1) {
+                } elseif ($this->booking_type == ResourceBooking::TYPE_RESERVATION) {
                     PageLayout::setTitle(
                         _('Neue Reservierung')
                     );
@@ -721,7 +725,7 @@ class Resources_BookingController extends AuthenticatedController
 
             if ($mode == 'edit') {
                 if (count($this->resources) == 1) {
-                    if ($this->booking_type == 3) {
+                    if ($this->booking_type == ResourceBooking::TYPE_PLANNED) {
                         PageLayout::setTitle(
                             sprintf(
                                 _('%1$s: Geplante Buchung am %2$s bearbeiten'),
@@ -729,7 +733,7 @@ class Resources_BookingController extends AuthenticatedController
                                 $booking_date
                             )
                         );
-                    } elseif ($this->booking_type == 2) {
+                    } elseif ($this->booking_type == ResourceBooking::TYPE_LOCK) {
                         PageLayout::setTitle(
                             sprintf(
                                 _('%1$s: Sperrbuchung am %2$s bearbeiten'),
@@ -737,7 +741,7 @@ class Resources_BookingController extends AuthenticatedController
                                 $booking_date
                             )
                         );
-                    } elseif ($this->booking_type == 1) {
+                    } elseif ($this->booking_type == ResourceBooking::TYPE_RESERVATION) {
                         PageLayout::setTitle(
                             sprintf(
                                 _('%1$s: Reservierung am %2$s bearbeiten'),
@@ -755,21 +759,21 @@ class Resources_BookingController extends AuthenticatedController
                         );
                     }
                 } else {
-                    if ($this->booking_type == 3) {
+                    if ($this->booking_type == ResourceBooking::TYPE_PLANNED) {
                         PageLayout::setTitle(
                             sprintf(
                                 _('Geplante Buchung am %s bearbeiten'),
                                 $booking_date
                             )
                         );
-                    } elseif ($this->booking_type == 2) {
+                    } elseif ($this->booking_type == ResourceBooking::TYPE_LOCK) {
                         PageLayout::setTitle(
                             sprintf(
                                 _('Sperrbuchung am %s bearbeiten'),
                                 $booking_date
                             )
                         );
-                    } elseif ($this->booking_type == 1) {
+                    } elseif ($this->booking_type == ResourceBooking::TYPE_RESERVATION) {
                         PageLayout::setTitle(
                             sprintf(
                                 _('Reservierung am %s bearbeiten'),
@@ -802,7 +806,7 @@ class Resources_BookingController extends AuthenticatedController
 
         //Check permissions:
         if ($mode == 'add') {
-            if ($this->booking_type != 2) {
+            if ($this->booking_type != ResourceBooking::TYPE_LOCK) {
                 foreach ($this->resources as $resource) {
                     if (!$resource->userHasBookingRights($this->current_user)) {
                         //The permissions are insufficient for at least one
@@ -1145,7 +1149,11 @@ class Resources_BookingController extends AuthenticatedController
 
             //Validation:
 
-            if (($this->booking_type < 0) || ($this->booking_type > 2)) {
+            if (!in_aray($this->booking_type, [
+                ResourceBooking::TYPE_NORMAL,
+                ResourceBooking::TYPE_RESERVATION,
+                ResourceBooking::TYPE_LOCK,
+            ])) {
                 PageLayout::postError(
                     _('Es wurde ein ungültiger Buchungstyp gewählt.')
                 );
@@ -1909,9 +1917,9 @@ class Resources_BookingController extends AuthenticatedController
             return;
         }
 
-        if ($this->booking->booking_type == '0') {
+        if ($this->booking->booking_type == ResourceBooking::TYPE_NORMAL) {
             PageLayout::setTitle(_('Buchung in Reservierung umwandeln'));
-        } elseif ($this->booking->booking_type == '1') {
+        } elseif ($this->booking->booking_type == ResourceBooking::TYPE_RESERVATION) {
             PageLayout::setTitle(_('Reservierung in Buchung umwandeln'));
         } else {
             PageLayout::postError(
@@ -1931,7 +1939,7 @@ class Resources_BookingController extends AuthenticatedController
             return;
         }
 
-        if ($this->booking->booking_type == '1') {
+        if ($this->booking->booking_type == ResourceBooking::TYPE_RESERVATION) {
             $fully_available = true;
             foreach ($intervals as $interval) {
                 $begin = new DateTime();
@@ -1958,10 +1966,10 @@ class Resources_BookingController extends AuthenticatedController
         if (Request::submitted('transform')) {
             CSRFProtection::verifyUnsafeRequest();
 
-            if ($this->booking->booking_type == '0') {
-                $this->booking->booking_type = '1';
-            } elseif ($this->booking->booking_type == '1') {
-                $this->booking->booking_type = '0';
+            if ($this->booking->booking_type == ResourceBooking::TYPE_NORMAL) {
+                $this->booking->booking_type = ResourceBooking::TYPE_RESERVATION;
+            } elseif ($this->booking->booking_type == ResourceBooking::TYPE_RESERVATION) {
+                $this->booking->booking_type = ResourceBooking::TYPE_NORMAL;
             }
 
             $saved = false;
@@ -1971,11 +1979,11 @@ class Resources_BookingController extends AuthenticatedController
                 $saved = true;
             }
             if ($saved) {
-                if ($this->booking->booking_type == '0') {
+                if ($this->booking->booking_type == ResourceBooking::TYPE_NORMAL) {
                     PageLayout::postSuccess(
                         _('Die Buchung wurde gespeichert.')
                     );
-                } elseif ($this->booking->booking_type == '1') {
+                } elseif ($this->booking->booking_type == ResourceBooking::TYPE_RESERVATION) {
                     PageLayout::postSuccess(
                         _('Die Reservierung wurde gespeichert.')
                     );
@@ -1983,18 +1991,18 @@ class Resources_BookingController extends AuthenticatedController
                 $this->response->add_header('X-Dialog-Close', '1');
                 $this->render_nothing();
             } else {
-                if ($this->booking->booking_type == '0') {
+                if ($this->booking->booking_type == ResourceBooking::TYPE_NORMAL) {
                     PageLayout::postError(
                         _('Die Buchung konnte nicht gespeichert werden.')
                     );
-                } elseif ($this->booking->booking_type == '1') {
+                } elseif ($this->booking->booking_type == ResourceBooking::TYPE_RESERVATION) {
                     PageLayout::postError(
                         _('Die Reservierung konnte nicht gespeichert werden.')
                     );
                 }
             }
         } else {
-            if ($this->booking->booking_type == '0') {
+            if ($this->booking->booking_type == ResourceBooking::TYPE_NORMAL) {
                 PageLayout::postWarning(
                     _('Soll die folgende Buchung wirklich in eine Reservierung umgewandelt werden?')
                 );
diff --git a/app/controllers/resources/export.php b/app/controllers/resources/export.php
index a891af2bcfb0bc7a9dd6e0c3e2c3c3cbccf1cf71..488cff5f54c5fcb26ac2646c1b98fedb3f0c6710 100644
--- a/app/controllers/resources/export.php
+++ b/app/controllers/resources/export.php
@@ -128,10 +128,10 @@ class Resources_ExportController extends AuthenticatedController
 
         // All available booking types.
         $this->booking_types = [
-            0 => _('Buchung'),
-            1 => _('Reservierung'),
-            2 => _('Sperrbuchung'),
-            3 => _('geplante Buchung')
+            ResourceBooking::TYPE_NORMAL          => _('Buchung'),
+            ResourceBooking::TYPE_RESERVATION     => _('Reservierung'),
+            ResourceBooking::TYPE_LOCK            => _('Sperrbuchung'),
+            ResourceBooking::TYPE_PLANNED => _('geplante Buchung')
         ];
         $this->selected_booking_types = Request::intArray('bookingtypes') ?:
             Config::get()->RESOURCES_EXPORT_BOOKINGTYPES_DEFAULT;
@@ -236,10 +236,10 @@ class Resources_ExportController extends AuthenticatedController
 
         // All available booking types.
         $this->booking_types = [
-            0 => _('Buchung'),
-            1 => _('Reservierung'),
-            2 => _('Sperrbuchung'),
-            3 => _('geplante Buchung')
+            ResourceBooking::TYPE_NORMAL          => _('Buchung'),
+            ResourceBooking::TYPE_RESERVATION     => _('Reservierung'),
+            ResourceBooking::TYPE_LOCK            => _('Sperrbuchung'),
+            ResourceBooking::TYPE_PLANNED => _('geplante Buchung')
         ];
         $this->selected_booking_types = Config::get()->RESOURCES_EXPORT_BOOKINGTYPES_DEFAULT;
     }
@@ -384,13 +384,13 @@ class Resources_ExportController extends AuthenticatedController
                     ),
                     $booking->resource->name,
                     (
-                    $booking->booking_type == '0'
+                    $booking->booking_type == ResourceBooking::TYPE_NORMAL
                         ? _('Buchung')
                         : (
-                    $booking->booking_type == '1'
+                    $booking->booking_type == ResourceBooking::TYPE_RESERVATION
                         ? _('Reservierung')
                         : (
-                    $booking->booking_type == '2'
+                    $booking->booking_type == ResourceBooking::TYPE_LOCK
                         ? _('Sperrbuchung')
                         : _('sonstiges')
                     )
@@ -494,11 +494,11 @@ class Resources_ExportController extends AuthenticatedController
                 }
 
                 $booking_type_string = '';
-                if ($interval->booking->booking_type == '0') {
+                if ($interval->booking->booking_type == ResourceBooking::TYPE_NORMAL) {
                     $booking_type_string = _('Buchung');
-                } elseif ($interval->booking->booking_type == '1') {
+                } elseif ($interval->booking->booking_type == ResourceBooking::TYPE_RESERVATION) {
                     $booking_type_string = _('Reservierung');
-                } elseif ($interval->booking->booking_type == '2') {
+                } elseif ($interval->booking->booking_type == ResourceBooking::TYPE_LOCK) {
                     $booking_type_string = _('Sperrbuchung');
                 }
 
diff --git a/app/controllers/resources/print.php b/app/controllers/resources/print.php
index 3b4c1e5d94c96c22e3d8c420f9540631f04f9084..8674fae63bf4a584901c2d795f87d7e9a081147f 100644
--- a/app/controllers/resources/print.php
+++ b/app/controllers/resources/print.php
@@ -140,10 +140,10 @@ class Resources_PrintController extends AuthenticatedController
 
         // All available booking types.
         $this->booking_types = [
-            0 => _('Buchung'),
-            1 => _('Reservierung'),
-            2 => _('Sperrbuchung'),
-            3 => _('geplante Buchung')
+            ResourceBooking::TYPE_NORMAL      => _('Buchung'),
+            ResourceBooking::TYPE_RESERVATION => _('Reservierung'),
+            ResourceBooking::TYPE_LOCK        => _('Sperrbuchung'),
+            ResourceBooking::TYPE_PLANNED     => _('geplante Buchung'),
         ];
 
         // Get additional text to print
diff --git a/app/controllers/resources/resource.php b/app/controllers/resources/resource.php
index d7bd0d24df09cc1f24526af5531f73dbba43af19..6bec6e277d3226577980ed85106a2182a9b8af9f 100644
--- a/app/controllers/resources/resource.php
+++ b/app/controllers/resources/resource.php
@@ -1203,21 +1203,24 @@ class Resources_ResourceController extends AuthenticatedController
         $this->show_form = false;
 
         $this->booking_type = Request::int('type');
-        if (!in_array($this->booking_type, [1, 2])) {
+        if (!in_array($this->booking_type, [
+            ResourceBooking::TYPE_RESERVATION,
+            ResourceBooking::TYPE_LOCK
+        ])) {
             PageLayout::postError(
                 _('Es wurde kein passender Buchungstyp angegeben!')
             );
             return;
         }
 
-        if ($this->booking_type == 1) {
+        if ($this->booking_type == ResourceBooking::TYPE_RESERVATION) {
             PageLayout::setTitle(
                 sprintf(
                     _('%s: Reservierung erstellen'),
                     $this->resource->getFullName()
                 )
             );
-        } elseif ($this->booking_type == 2) {
+        } elseif ($this->booking_type == ResourceBooking::TYPE_LOCK) {
             PageLayout::setTitle(
                 sprintf(
                     _('%s: Sperrbuchung erstellen'),
diff --git a/app/controllers/resources/room_planning.php b/app/controllers/resources/room_planning.php
index 220d7a84114405cc298310ab244b61a375942352..3b550f06828c725f93f4e5b2bacec0e4fedf4ccd 100644
--- a/app/controllers/resources/room_planning.php
+++ b/app/controllers/resources/room_planning.php
@@ -148,7 +148,11 @@ class Resources_RoomPlanningController extends AuthenticatedController
         //The booking plan is also visible when the resource is a room
         //and its booking plan is publicly available.
         $this->anonymous_view = true;
-        $this->booking_types  = [0, 1, 2];
+        $this->booking_types  = [
+            ResourceBooking::TYPE_NORMAL,
+            ResourceBooking::TYPE_RESERVATION,
+            ResourceBooking::TYPE_LOCK,
+        ];
         if ($this->user instanceof User) {
             if ($this->display_all_requests) {
                 $plan_is_visible = $this->resource->userHasPermission(
@@ -160,7 +164,7 @@ class Resources_RoomPlanningController extends AuthenticatedController
             }
             $this->anonymous_view = false;
             if ($this->resource->userHasPermission($this->user, 'admin')) {
-                $this->booking_types[] = 3;
+                $this->booking_types[] = ResourceBooking::TYPE_PLANNED;
             }
         } else {
             //If the plan visibility cannot be determined by the user,
@@ -551,9 +555,13 @@ class Resources_RoomPlanningController extends AuthenticatedController
         $this->user_is_global_resource_admin = ResourceManager::userHasGlobalPermission($this->user, 'admin');
         $this->show_global_admin_actions     = $this->user_is_global_resource_admin;
         $this->user_has_booking_permissions  = $this->resource->userHasBookingRights($this->user);
-        $this->booking_types                 = [0, 1, 2];
+        $this->booking_types = [
+            ResourceBooking::TYPE_NORMAL,
+            ResourceBooking::TYPE_RESERVATION,
+            ResourceBooking::TYPE_LOCK,
+        ];
         if ($this->resource->userHasPermission($this->user, 'admin')) {
-            $this->booking_types[] = 3;
+            $this->booking_types[] = ResourceBooking::TYPE_PLANNED;
         }
         if ($this->user_has_booking_permissions) {
             URLHelper::addLinkParam('display_single_bookings', Request::get("display_single_bookings"));
diff --git a/app/controllers/resources/room_request.php b/app/controllers/resources/room_request.php
index db892e09d2eafa07c6087b3db48718a689355638..c6aed3a42412884ae8c92608eac1ae6b34fe5228 100644
--- a/app/controllers/resources/room_request.php
+++ b/app/controllers/resources/room_request.php
@@ -1458,7 +1458,7 @@ class Resources_RoomRequestController extends AuthenticatedController
         }
 
         $this->notification_settings = 'creator';
-        if ($this->request->reply_recipients == 'lecturer') {
+        if ($this->request->reply_recipients === ResourceRequest::REPLY_LECTURER) {
             $this->notification_settings = 'creator_and_lecturers';
         }
         $this->reply_comment = $this->request->reply_comment;
diff --git a/app/controllers/resources/statistics.php b/app/controllers/resources/statistics.php
index 6ae55e11d2d52a4fba5f7c510edc86ed0da6bbcc..6738833889cf1636005b25343a47beb0350f1499 100644
--- a/app/controllers/resources/statistics.php
+++ b/app/controllers/resources/statistics.php
@@ -60,7 +60,10 @@ class Resources_StatisticsController extends AuthenticatedController
 
         $sum_stmt->execute(
             [
-                'types' => [0, 1],
+                'types' => [
+                    ResourceBooking::TYPE_NORMAL,
+                    ResourceBooking::TYPE_RESERVATION,
+                ],
                 'begin' => $year_begin->getTimestamp(),
                 'end' => $year_end->getTimestamp()
             ]
@@ -69,7 +72,7 @@ class Resources_StatisticsController extends AuthenticatedController
 
         $sum_stmt->execute(
             [
-                'types' => [2],
+                'types' => [ResourceBooking::TYPE_LOCK],
                 'begin' => $year_begin->getTimestamp(),
                 'end' => $year_end->getTimestamp()
             ]
diff --git a/app/controllers/room_management/planning.php b/app/controllers/room_management/planning.php
index 81627e294ae6dae687d71262aa82adc26cd64683..9bfd00fe2265a367518f5798e643be623d3b02e8 100644
--- a/app/controllers/room_management/planning.php
+++ b/app/controllers/room_management/planning.php
@@ -149,7 +149,11 @@ class RoomManagement_PlanningController extends AuthenticatedController
         $request_rights_c = 0;
         $booking_rights_c = 0;
         $admin_rights_c = 0;
-        $this->booking_types = [0, 1, 2];
+        $this->booking_types = [
+            ResourceBooking::TYPE_NORMAL,
+            ResourceBooking::TYPE_RESERVATION,
+            ResourceBooking::TYPE_LOCK,
+        ];
 
         foreach ($rooms as $room) {
             if ($room->userHasRequestRights($current_user)) {
@@ -183,7 +187,7 @@ class RoomManagement_PlanningController extends AuthenticatedController
         $all_rooms_admin = ($room_c == $admin_rights_c);
         if ($all_rooms_admin) {
             //Display planned bookings, too:
-            $this->booking_types[] = 3;
+            $this->booking_types[] = ResourceBooking::TYPE_PLANNED;
         }
         if (!$this->all_rooms_booking_rights && $this->display_all_requests) {
             throw new AccessDeniedException(
@@ -447,7 +451,11 @@ class RoomManagement_PlanningController extends AuthenticatedController
         $requestable_rooms_c = 0;
         $booking_rights_c = 0;
         $admin_rights_c = 0;
-        $this->booking_types = [0, 1, 2];
+        $this->booking_types = [
+            ResourceBooking::TYPE_NORMAL,
+            ResourceBooking::TYPE_RESERVATION,
+            ResourceBooking::TYPE_LOCK,
+        ];
 
         foreach ($rooms as $room) {
             if ($room->userHasBookingRights($current_user)) {
@@ -471,7 +479,7 @@ class RoomManagement_PlanningController extends AuthenticatedController
         $all_rooms_admin = ($room_c == $admin_rights_c);
         if ($all_rooms_admin) {
             //Display planned bookings, too:
-            $this->booking_types[] = 3;
+            $this->booking_types[] = ResourceBooking::TYPE_PLANNED;
         }
 
         if (!$all_rooms_booking_rights && $this->display_all_requests) {
diff --git a/app/views/course/feedback/_add_edit_entry_form.php b/app/views/course/feedback/_add_edit_entry_form.php
index e7442e24d7b3e85c3db84530b0331a1a2ac646f5..b117b782e9db296c3fff8e064da4c01a5b56de59 100644
--- a/app/views/course/feedback/_add_edit_entry_form.php
+++ b/app/views/course/feedback/_add_edit_entry_form.php
@@ -4,10 +4,10 @@
  * @var FeedbackEntry|null $entry
  */
 ?>
-<? if ($feedback->mode != 0) : ?>
+<? if ($feedback->mode != FeedbackElement::MODE_NO_RATING) : ?>
 <?php
     $n = 5;
-    if ($feedback->mode == 2) {
+    if ($feedback->mode == FeedbackElement::MODE_10STAR_RATING) {
         $n = 10;
     }
 ?>
diff --git a/app/views/course/feedback/_entry.php b/app/views/course/feedback/_entry.php
index 586743d5d8794cf4625867ec0762b84c4f0cbd57..29f35fbd967c8a938c311596cf8c6b258222138d 100644
--- a/app/views/course/feedback/_entry.php
+++ b/app/views/course/feedback/_entry.php
@@ -25,7 +25,7 @@
             <? endif; ?>
         </nav>
     </header>
-    <? if ($entry->feedback->mode != 0) : ?>
+    <? if ($entry->feedback->mode != FeedbackElement::MODE_NO_RATING) : ?>
         <div class="rating">
             <span title="<?= $entry->rating ?>">
                 <? for ($i=0; $i < $entry->feedback->getMaxRating(); $i++) : ?>
diff --git a/app/views/course/feedback/_feedback_stream.php b/app/views/course/feedback/_feedback_stream.php
index 888b46390fc49a39031a11c181309944b6849056..af1ffad71b403feb47977dd17417fe902a1920bf 100644
--- a/app/views/course/feedback/_feedback_stream.php
+++ b/app/views/course/feedback/_feedback_stream.php
@@ -2,7 +2,7 @@
     <header>
         <h1>
             <a href="<?= $controller->link_for('course/feedback/view/' . $feedback->id) ?>">
-                <? if ($feedback->mode != 0 && ((!$feedback->isFeedbackable() && $feedback->results_visible == 1) || $admin_perm) && count($feedback->entries) > 0) : ?>
+                <? if ($feedback->mode != FeedbackElement::MODE_NO_RATING && ((!$feedback->isFeedbackable() && $feedback->results_visible == 1) || $admin_perm) && count($feedback->entries) > 0) : ?>
                 <?= Icon::create('star') ?>
                 <span class="mean"><?= $feedback->getMeanOfRating() ?></span>
                 <? endif; ?>
@@ -33,4 +33,4 @@
     <div class="feedback-view">
         <?= $this->render_partial('course/feedback/_feedback.php' , ['feedback' => $feedback]) ?>
     </div>
-</article>
\ No newline at end of file
+</article>
diff --git a/app/views/course/feedback/_new_edit_feedback_form.php b/app/views/course/feedback/_new_edit_feedback_form.php
index e39fed4cf96fa7fff76a2173a321f15772256995..b5268c0a4678f84bf032315452bb9cf08fe83270 100644
--- a/app/views/course/feedback/_new_edit_feedback_form.php
+++ b/app/views/course/feedback/_new_edit_feedback_form.php
@@ -24,7 +24,7 @@
     </label>
     <label>
         <input id="comment-only" type="checkbox" name="comment_only" value="1"
-            <?= $feedback->mode == 0 ? 'checked' : '' ?> <? if ($this->current_action ==
+            <?= $feedback->mode == FeedbackElement::MODE_NO_RATING ? 'checked' : '' ?> <? if ($this->current_action ==
         'edit_form') {echo ('disabled');} else { echo('data-deactivates="#comment-activated, .feedback-mode"');}?>>
         <?= _('Nur Kommentare (keine numerische Bewertung)') ?>
     </label>
@@ -34,13 +34,15 @@
         <?= _('Bewertungsmodus') ?>
     </legend>
     <label>
-        <input class="feedback-mode" type="radio" name="mode" value="1" <?= $feedback->mode == 1 ? 'checked' : '' ?>
-            required <? if ($this->current_action ==
-        'edit_form') {echo ('disabled');}?>><?= _('Sternbewertung von 1 bis 5') ?>
+        <input class="feedback-mode" type="radio" name="mode" value="<?= FeedbackElement::MODE_5STAR_RATING ?>"
+            <?= $feedback->mode == FeedbackElement::MODE_5STAR_RATING ? 'checked' : '' ?>
+            required <? if ($current_action === 'edit_form') echo ('disabled'); ?>>
+        <?= _('Sternbewertung von 1 bis 5') ?>
     </label>
     <label>
-        <input class="feedback-mode" type="radio" name="mode" value="2" <?= $feedback->mode == 2 ? 'checked' : '' ?> <?
-            if ($this->current_action ==
-        'edit_form') {echo ('disabled');}?>><?= _('Sternbewertung von 1 bis 10') ?>
+        <input class="feedback-mode" type="radio" name="mode" value="<?= FeedbackElement::MODE_10STAR_RATING ?>"
+            <?= $feedback->mode == FeedbackElement::MODE_10STAR_RATING ? 'checked' : '' ?> <?
+            if ($current_action === 'edit_form') echo ('disabled'); ?>>
+        <?= _('Sternbewertung von 1 bis 10') ?>
     </label>
-</fieldset>
\ No newline at end of file
+</fieldset>
diff --git a/app/views/course/feedback/_results.php b/app/views/course/feedback/_results.php
index 21e5cb1153f57844779d172fcbf10ae384fd0d9c..6720632bf0c473dc81045b09dabb4280dae35126 100644
--- a/app/views/course/feedback/_results.php
+++ b/app/views/course/feedback/_results.php
@@ -4,13 +4,12 @@
     <? if ($entries_count == 0 ) {
         print(_('Bisher wurde kein Feedback gegeben.'));
     } ?>
-    <? if ($feedback->mode == 0) {
+    <? if ($feedback->mode == FeedbackElement::MODE_NO_RATING) {
         printf(_('Insgesamt wurde %s mal Feedback gegeben.'), $entries_count);
     } ?>
-    <? if ($entries_count >= 1 && $feedback->mode != 0) : ?>
+    <? if ($entries_count >= 1 && $feedback->mode != FeedbackElement::MODE_NO_RATING) : ?>
         <?
-            $rating_scale = 5;
-            if ($feedback->mode == 2) {$rating_scale = 10;}
+            $rating_scale = $feedback->mode == FeedbackElement::MODE_5STAR_RATING ? 5 : 10;
         ?>
         <div class="ratings">
             <table class="default sortable-table feedback" data-sortlist="[[1, 1]]">
diff --git a/app/views/course/feedback/index.php b/app/views/course/feedback/index.php
index 44805346ca253a0b627c2a3e98a0cfa93b8c0d55..602d445a33f62aaca82b4c570bca2f18195d3b31 100644
--- a/app/views/course/feedback/index.php
+++ b/app/views/course/feedback/index.php
@@ -72,7 +72,7 @@
                     </a>
                 </td>
                 <td>
-                    <?php if (count($feedback->entries) >= 1 && $feedback->mode != 0) {
+                    <?php if (count($feedback->entries) >= 1 && $feedback->mode != FeedbackElement::MODE_NO_RATING) {
                         echo $feedback->getMeanOfRating();
                     }
                     ?>
@@ -81,9 +81,9 @@
                     <?= count($feedback->entries) ?>
                 </td>
                 <td data-sort-value="<?= $feedback->mode ?>" class="responsive-hidden">
-                    <? if($feedback->mode == 1) : ?>
+                    <? if($feedback->mode == FeedbackElement::MODE_5STAR_RATING) : ?>
                         <?= Icon::create('star', Icon::ROLE_INFO) ?> (1-5)
-                    <? elseif($feedback->mode == 2): ?>
+                    <? elseif($feedback->mode == FeedbackElement::MODE_10STAR_RATING): ?>
                         <?= Icon::create('star', Icon::ROLE_INFO) ?> (1-10)
                     <? else: ?>
                         <?= _('Kommentar') ?>
diff --git a/app/views/resources/booking/_add_edit_form.php b/app/views/resources/booking/_add_edit_form.php
index c35f405db1c0dd57f62e5a7603caa6ebb53d5fba..571ff63f0ed777d378498ac814b7ef9a5d64e87e 100644
--- a/app/views/resources/booking/_add_edit_form.php
+++ b/app/views/resources/booking/_add_edit_form.php
@@ -21,20 +21,20 @@
                 <fieldset class="booking-type-selection">
                     <legend><?= _('Bitte wählen Sie einen der folgenden Buchungstypen aus:') ?></legend>
                     <select name="booking_type" autofocus>
-                        <option value="0"
-                            <?= $booking_type == '0'
+                        <option value="<?= ResourceBooking::TYPE_NORMAL ?>"
+                            <?= $booking_type == ResourceBooking::TYPE_NORMAL
                                 ? 'selected="selected"'
                                 : '' ?>>
                             <?= _('Buchung') ?>
                         </option>
-                        <option value="1"
-                            <?= $booking_type == '1'
+                        <option value="<?= ResourceBooking::TYPE_RESERVATION ?>"
+                            <?= $booking_type == ResourceBooking::TYPE_RESERVATION
                                 ? 'selected="selected"'
                                 : '' ?>>
                             <?= _('Reservierung') ?>
                         </option>
-                        <option value="2"
-                            <?= $booking_type == '2'
+                        <option value="<?= ResourceBooking::TYPE_LOCK ?>"
+                            <?= $booking_type == ResourceBooking::TYPE_LOCK
                                 ? 'selected="selected"'
                                 : '' ?>>
                             <?= _('Sperrbuchung') ?>
@@ -159,7 +159,7 @@
                 </div>
 
 
-                <? if ($booking_type != '2'): ?>
+                <? if ($booking_type != ResourceBooking::TYPE_LOCK): ?>
                     <label>
                         <?= _('Rüstzeit (Minuten)') ?>
                         <input type="number" name="preparation_time"
@@ -169,7 +169,7 @@
                     </label>
                 <? endif ?>
 
-                <span class="notification-span <?= ($booking_type != '2') ? 'invisible' : '' ?>" data-booking_type="2">
+                <span class="notification-span <?= ($booking_type != ResourceBooking::TYPE_LOCK) ? 'invisible' : '' ?>" data-booking_type="<?= ResourceBooking::TYPE_LOCK ?>">
                     <label>
                         <input type="checkbox" name="notification_enabled"
                                value="1"
@@ -187,18 +187,16 @@
                             <?= $book_other_room_parts
                                 ? 'checked="checked"'
                                 : '' ?>>
-                        <span data-booking_type="2"
-                              <?= $booking_type == '2' ? '' : 'style="display:none;"' ?>>
+                        <span data-booking_type="<?= ResourceBooking::TYPE_LOCK ?>"
+                              <?= $booking_type == ResourceBooking::TYPE_LOCK ? '' : 'style="display:none;"' ?>>
                             <?= _('Alle anderen Teilräume ebenfalls sperren.') ?>
                         </span>
-                        <span data-booking_type="1"
-                              <?= $booking_type == '1' ? '' : 'style="display:none;"' ?>>
+                        <span data-booking_type="<?= ResourceBooking::TYPE_RESERVATION ?>"
+                              <?= $booking_type == ResourceBooking::TYPE_RESERVATION ? '' : 'style="display:none;"' ?>>
                             <?= _('Alle anderen Teilräume ebenfalls reservieren.') ?>
                         </span>
-                        <span data-booking_type="0"
-                              <?= (!$booking_type or $booking_type == '0')
-                                  ? ''
-                                  : 'style="display:none;"' ?>>
+                        <span data-booking_type="<?= ResourceBooking::TYPE_NORMAL ?>"
+                              <?= $booking_type == ResourceBooking::TYPE_NORMAL ? '' : 'style="display:none;"' ?>>
                             <?= _('Alle anderen Teilräume ebenfalls buchen.') ?>
                         </span>
                     </label>
@@ -514,29 +512,27 @@
         </div>
         <div class="fieldset-row">
             <fieldset class="comment-fieldset">
-                <legend data-booking_type="1"
-                    <?= $booking_type == '1' ? '' : 'style="display:none;"' ?>>
+                <legend data-booking_type="<?= ResourceBooking::TYPE_RESERVATION ?>"
+                    <?= $booking_type == ResourceBooking::TYPE_RESERVATION ? '' : 'style="display:none;"' ?>>
                     <?= _('Interner Kommentar zur Reservierung') ?>
                 </legend>
-                <legend data-booking_type="2"
-                    <?= $booking_type == '2' ? '' : 'style="display:none;"' ?>>
+                <legend data-booking_type="<?= ResourceBooking::TYPE_LOCK ?>"
+                    <?= $booking_type == ResourceBooking::TYPE_LOCK ? '' : 'style="display:none;"' ?>>
                     <?= _('Interner Kommentar zur Sperrbuchung') ?>
                 </legend>
-                <legend data-booking_type="3"
-                    <?= $booking_type == '3' ? '' : 'style="display:none;"' ?>>
+                <legend data-booking_type="<?= ResourceBooking::TYPE_PLANNED ?>"
+                    <?= $booking_type == ResourceBooking::TYPE_PLANNED ? '' : 'style="display:none;"' ?>>
                     <?= _('Interner Kommentar zur geplanten Buchung') ?>
                 </legend>
-                <legend data-booking_type="0"
-                    <?= (($booking_type == '0') || !$booking_type)
-                        ? ''
-                        : 'style="display:none;"' ?>>
+                <legend data-booking_type="<?= ResourceBooking::TYPE_NORMAL ?>"
+                    <?= $booking_type == ResourceBooking::TYPE_NORMAL ? '' : 'style="display:none;"' ?>>
                     <?= _('Interner Kommentar zur Buchung') ?>
                 </legend>
                 <label>
                     <textarea name="internal_comment"><?= htmlReady($internal_comment) ?></textarea>
                 </label>
             </fieldset>
-            <fieldset class="overwrite-fieldset <?= ($booking_type != '2') ? 'invisible' : '' ?>" data-booking_type="2">
+            <fieldset class="overwrite-fieldset <?= $booking_type != ResourceBooking::TYPE_LOCK ? 'invisible' : '' ?>" data-booking_type="<?= ResourceBooking::TYPE_LOCK ?>">
                 <legend><?= _('Vorhandene Buchungen überschreiben') ?></legend>
                 <label>
                     <input type="checkbox" value="1"
diff --git a/app/views/resources/booking/edit.php b/app/views/resources/booking/edit.php
index 25c9d5ebae52a9c9964888242853b8c2d7c27123..ee1610f283b8d84d44ee3e6202a089d723eeb57b 100644
--- a/app/views/resources/booking/edit.php
+++ b/app/views/resources/booking/edit.php
@@ -22,7 +22,7 @@
             'data-dialog' => 'size=auto'
         ]
     ) ?>
-    <? if ($booking->booking_type == '1') : ?>
+    <? if ($booking->booking_type == ResourceBooking::TYPE_RESERVATION) : ?>
         <?= \Studip\LinkButton::create(
             _('In Buchung umwandeln'),
             $controller->url_for('resources/booking/transform/' . $booking->id),
@@ -30,7 +30,7 @@
                 'data-dialog' => 'size=auto'
             ]
         ) ?>
-    <? elseif ($booking->booking_type == '0') : ?>
+    <? elseif ($booking->booking_type == ResourceBooking::TYPE_NORMAL) : ?>
         <?= \Studip\LinkButton::create(
             _('In Reservierung umwandeln'),
             $controller->url_for('resources/booking/transform/' . $booking->id),
diff --git a/app/views/resources/booking/index.php b/app/views/resources/booking/index.php
index 3e004ecf2b55d296c0b095033326ec83f2186406..596ff3cea5f7229c56611e8b11c60c2357cbebf8 100644
--- a/app/views/resources/booking/index.php
+++ b/app/views/resources/booking/index.php
@@ -41,7 +41,7 @@
         <?= _('Nicht verfügbar') ?>
     <? endif ?>
 
-    <? if ($booking->booking_type == '2'): ?>
+    <? if ($booking->booking_type == ResourceBooking::TYPE_LOCK): ?>
         <? if ($user_has_user_perms): ?>
             <h3><?= _('Gesperrt für:') ?></h3>
             <?= htmlReady($booking->getAssignedUserName()) ?>
@@ -50,7 +50,7 @@
         <?= $booking->booking_user
           ? htmlReady($booking->booking_user->getFullName())
           : _('unbekannt') ?>
-    <? elseif ($booking->booking_type == '1'): ?>
+    <? elseif ($booking->booking_type == ResourceBooking::TYPE_RESERVATION): ?>
         <? if ($user_has_user_perms): ?>
             <h3><?= _('Reserviert für:') ?></h3>
             <?= htmlReady($booking->getAssignedUserName()) ?>
diff --git a/app/views/resources/print/individual_booking_plan.php b/app/views/resources/print/individual_booking_plan.php
index 54672d60959b559f33a0215e596669c96af23db4..d8c60867d115fdc41904534dc940b5c39f51f976 100644
--- a/app/views/resources/print/individual_booking_plan.php
+++ b/app/views/resources/print/individual_booking_plan.php
@@ -16,7 +16,11 @@
                     ),
                     'method' => 'GET',
                     'extraParams' => [
-                        'booking_types' => [0,1,2]
+                        'booking_types' => [
+                            ResourceBooking::TYPE_NORMAL,
+                            ResourceBooking::TYPE_RESERVATION,
+                            ResourceBooking::TYPE_LOCK,
+                        ],
                     ]
                 ]
             ],
diff --git a/app/views/resources/resource/booking_plan.php b/app/views/resources/resource/booking_plan.php
index dc8852ddc8f281249ac9970b0d260217c041f417..ced660e773cd1dbef27f7dc9a4e04c6d4068b4d5 100644
--- a/app/views/resources/resource/booking_plan.php
+++ b/app/views/resources/resource/booking_plan.php
@@ -24,7 +24,11 @@
                 ),
                 'method' => 'GET',
                 'extraParams' => [
-                    'booking_types' => [0,1,2],
+                    'booking_types' => [
+                        ResourceBooking::TYPE_NORMAL,
+                        ResourceBooking::TYPE_RESERVATION,
+                        ResourceBooking::TYPE_LOCK,
+                    ],
                     'display_requests' => 0
                 ]
             ]
diff --git a/app/views/resources/room_planning/semester_plan.php b/app/views/resources/room_planning/semester_plan.php
index 11a2f799d4c11b0b3fa7a52124e0a46a0a659fc5..607891d42d7e0f3e31564f0d6d22ead98f2d5c32 100644
--- a/app/views/resources/room_planning/semester_plan.php
+++ b/app/views/resources/room_planning/semester_plan.php
@@ -110,7 +110,11 @@
                     ),
                     'method' => 'GET',
                     'extraParams' => [
-                        'booking_types' => [0,1,2],
+                        'booking_types' => [
+                            ResourceBooking::TYPE_NORMAL,
+                            ResourceBooking::TYPE_RESERVATION,
+                            ResourceBooking::TYPE_LOCK,
+                        ],
                         'semester_id' => $semester->id,
                         'semester_timerange' => Request::get('semester_timerange', 'vorles'),
                         'display_requests' => 1,
diff --git a/app/views/resources/room_request/planning.php b/app/views/resources/room_request/planning.php
index 53f3dd01c8600277a0ea814ceb87ede5f336f5f4..364ee27e71f9d33eed3d78a17d8759a5acc2e65e 100644
--- a/app/views/resources/room_request/planning.php
+++ b/app/views/resources/room_request/planning.php
@@ -89,7 +89,12 @@
                     ),
                     'method'      => 'GET',
                     'extraParams' => [
-                        'booking_types'        => [0, 1, 2],
+                        'booking_types'        => [
+                            ResourceBooking::TYPE_NORMAL,
+                            ResourceBooking::TYPE_RESERVATION,
+                            ResourceBooking::TYPE_LOCK,
+
+                        ],
                         'semester_id'          => $semester->id,
                         'semester_timerange'   => Request::get("semester_timerange", 'vorles'),
                         'display_requests'     => 0,
diff --git a/cli/Commands/SORM/DescribeModels.php b/cli/Commands/SORM/DescribeModels.php
index 3d1256ff300a3c0abf57a7b256486cabb2b62a3e..46dd8ff3fa47535386631cee06fabf72993e51b2 100644
--- a/cli/Commands/SORM/DescribeModels.php
+++ b/cli/Commands/SORM/DescribeModels.php
@@ -15,6 +15,7 @@ final class DescribeModels extends AbstractCommand
     protected static $defaultName = 'sorm:describe';
 
     private $progress;
+    private $reflection;
 
     protected function configure(): void
     {
@@ -86,7 +87,7 @@ final class DescribeModels extends AbstractCommand
             }
 
             try {
-                $reflection = new \ReflectionClass($class_name);
+                $this->reflection = new \ReflectionClass($class_name);
             } catch (\Error $e) {
                 $this->outputForFile(
                     $output,
@@ -95,7 +96,7 @@ final class DescribeModels extends AbstractCommand
                 continue;
             }
 
-            if ($reflection->isAbstract()) {
+            if ($this->reflection->isAbstract()) {
                 $this->outputForFile(
                     $output,
                     "Skipping abstract class {$class_name}",
@@ -104,19 +105,36 @@ final class DescribeModels extends AbstractCommand
                 continue;
             }
 
-            $model = $reflection->newInstance();
+
+            $model = $this->reflection->newInstance();
+
+            // Get configuration for class
+            $config_property = $this->reflection->getProperty('config');
+            $config_property->setAccessible(true);
+            $model_config = $config_property->getValue()[$class_name];
+
+            // Get table metadata
             $meta = $model->getTableMetaData();
 
             $properties = [];
 
+            if (!isset($meta['fields']['id']) && count($meta['pk']) > 0) {
+                $properties['id'] = [
+                    'type' => count($meta['pk']) > 1 ? 'array' : $this->getPHPType($meta['pk'][0], $meta['fields'][$meta['pk'][0]]),
+                    'description' => 'alias for pk',
+                ];
+            }
+
             foreach ($meta['fields'] as $field => $info) {
                 $name = mb_strtolower($field);
-                $type = $this->getPHPType($info);
+                $type = $this->getPHPType($field, $info, $model_config);
                 $properties[$name] = [
                     'type'        => $type,
                     'description' => 'database column',
                 ];
-                if ($alias = array_search($name, $meta['alias_fields'])) {
+
+                $alias = array_search($name, $meta['alias_fields']);
+                if ($alias) {
                     $properties[$alias] = [
                         'type'        => $type,
                         'description' => "alias column for {$name}",
@@ -127,24 +145,50 @@ final class DescribeModels extends AbstractCommand
             foreach ($meta['relations'] as $relation) {
                 $options = $model->getRelationOptions($relation);
                 $related_class_name = $options['class_name'];
-                if (in_array($options['type'], ['has_many', 'has_and_belongs_to_many'])) {
-                    $related_class_name = SimpleORMapCollection::class;
-                }
 
-                if ($reflection->inNamespace()) {
-                    $related_class_name = "\\{$related_class_name}";
-                    if (mb_strpos($related_class_name, "\\{$reflection->getNamespaceName()}") === 0) {
-                        $related_class_name = substr($related_class_name, strlen($reflection->getNamespaceName()) + 2);
+                if (in_array($options['type'], ['has_many', 'has_and_belongs_to_many'])) {
+                    $related_type = implode('|', [
+                        $this->adjustNamespaceForClass(SimpleORMapCollection::class),
+                        $this->adjustNameSpaceForClass($related_class_name) . '[]',
+                    ]);
+                } else {
+                    $related_type = $this->adjustNamespaceForClass($related_class_name);
+
+                    if (
+                        $options['foreign_key'] !== 'id'
+                        && isset($meta['fields'][$options['foreign_key']])
+                        && $meta['fields'][$options['foreign_key']]['null'] === 'YES'
+                    ) {
+                        $related_type .= '|null';
                     }
                 }
 
                 $properties[$relation] = [
-                    'type'        => $related_class_name,
-                    'description' => "{$options['type']} {$options['class_name']}",
+                    'type'        => $related_type,
+                    'description' => "{$options['type']} " . $this->adjustNamespaceForClass($related_class_name),
                 ];
             }
 
-            if ($this->updateDocBlockOfClass($reflection, $properties)) {
+            foreach ($meta['additional_fields'] as $field => $definition) {
+                if ($field === 'id') {
+                    continue;
+                }
+
+                $property_type = null;
+                if (isset($definition['get']) && !isset($definition['set'])) {
+                    $property_type = 'property-read';
+                } elseif (!isset($definition['get']) && isset($definition['set'])) {
+                    $property_type = 'property-write';
+                }
+
+                $properties[$field] = [
+                    'property_type' => $property_type,
+                    'type' => $this->getAdditionFieldType($definition),
+                    'description' => 'additional field',
+                ];
+            }
+
+            if ($this->updateDocBlockOfClass($properties)) {
                 $this->outputForFile(
                     $output,
                     '<info>Updated ' . $this->relativeFilePath($file->getPathname()) . '</info>'
@@ -172,27 +216,35 @@ final class DescribeModels extends AbstractCommand
 
     }
 
-    private function getPHPType($info)
+    private function getPHPType(string $field, array $info, array $config = []): string
     {
-        if (preg_match('/^(?:tiny|small|medium|big)?int(?:eger)?/iS', $info['type'])) {
-            return 'int';
-        }
-
-        if (preg_match('/^(?:decimal|double|float|numeric)/iS', $info['type'])) {
-            return 'float';
+        $field = strtolower($field);
+
+        $type = [];
+
+        if (isset($config['serialized_fields'][$field])) {
+            $type[] = $this->adjustNamespaceForClass($config['serialized_fields'][$field]);
+        } elseif (isset($config['i18n_fields'][$field])) {
+            $type[] = $this->adjustNamespaceForClass(\I18NString::class);
+        } elseif (preg_match('/^(?:tiny|small|medium|big)?int(?:eger)?/i', $info['type'])) {
+            $type[] = 'int';
+        } elseif (preg_match('/^(?:decimal|double|float|numeric)/i', $info['type'])) {
+            $type[] = 'float';
+        } else {
+            $type[] = 'string';
         }
 
-        if (preg_match('/^bool(?:ean)?/iS', $info['type'])) {
-            return 'bool';
+        if ($info['null'] === 'YES') {
+            $type[] = 'null';
         }
 
-        return 'string';
+        return implode('|', $type);
     }
 
-    private function updateDocBlockOfClass(\ReflectionClass $reflection, array $properties): bool
+    private function updateDocBlockOfClass(array $properties): bool
     {
-        $has_docblock = (bool) $reflection->getDocComment();
-        $docblock     = $reflection->getDocComment() ?: $this->getDefaultDocblock();
+        $has_docblock = (bool) $this->reflection->getDocComment();
+        $docblock     = $this->reflection->getDocComment() ?: $this->getDefaultDocblock();
 
         $docblock_lines = array_map('rtrim', explode("\n", $docblock));
 
@@ -214,7 +266,13 @@ final class DescribeModels extends AbstractCommand
         $docblock_lines = array_reverse($docblock_lines);
 
         $properties = array_map(function ($variable, $property) {
-            return " * @property {$property['type']} \${$variable} {$property['description']}";
+            return sprintf(
+                ' * @%s %s $%s %s',
+                $property['property_type'] ?? 'property',
+                $property['type'],
+                $variable,
+                $property['description']
+            );
         }, array_keys($properties), array_values($properties));
 
         array_unshift($properties, ' *');
@@ -226,7 +284,7 @@ final class DescribeModels extends AbstractCommand
             return false;
         }
 
-        $contents = file_get_contents($reflection->getFileName());
+        $contents = file_get_contents($this->reflection->getFileName());
         if ($has_docblock) {
             $contents = str_replace($docblock, $new_docblock, $contents);
         } else {
@@ -238,7 +296,7 @@ final class DescribeModels extends AbstractCommand
             );
         }
 
-        file_put_contents($reflection->getFileName(), $contents);
+        file_put_contents($this->reflection->getFileName(), $contents);
 
         return true;
     }
@@ -282,4 +340,26 @@ final class DescribeModels extends AbstractCommand
         }
         return null;
     }
+
+    private function adjustNamespaceForClass(string $class): string
+    {
+        if (!$this->reflection->inNamespace()) {
+            return $class;
+        }
+
+        $namespace = $this->reflection->getNamespaceName();
+        $class = "\\{$class}";
+        if (str_starts_with($class, "\\{$namespace}")) {
+            $class = substr($class, strlen($namespace) + 2);
+        }
+        return $class;
+    }
+
+    private function getAdditionFieldType($definition): string
+    {
+        // TODO: Try to get a reasonable field type
+        // $definition may either be an array with definition or a boolean value
+
+        return 'mixed';
+    }
 }
diff --git a/lib/models/Abschluss.php b/lib/models/Abschluss.php
index a3299c8ab02131fd37c6828e1e470f14c5b74c5f..29143423b7c6ad6b62a34689ff1e88128bc9047c 100644
--- a/lib/models/Abschluss.php
+++ b/lib/models/Abschluss.php
@@ -12,6 +12,27 @@
  * @license     http://www.gnu.org/licenses/gpl-2.0.html GPL version 2
  * @category    Stud.IP
  * @since       3.5
+ *
+ * @property string $id alias column for abschluss_id
+ * @property string $abschluss_id database column
+ * @property I18NString $name database column
+ * @property I18NString|null $name_kurz database column
+ * @property I18NString|null $beschreibung database column
+ * @property string $author_id database column
+ * @property string $editor_id database column
+ * @property int|null $mkdate database column
+ * @property int|null $chdate database column
+ * @property SimpleORMapCollection|Fach[] $faecher has_many Fach
+ * @property SimpleORMapCollection|Studiengang[] $studiengaenge has_many Studiengang
+ * @property AbschlussKategorie $category belongs_to AbschlussKategorie
+ * @property AbschlussZuord $category_assignment has_one AbschlussZuord
+ * @property SimpleORMapCollection|Fach[] $professions has_and_belongs_to_many Fach
+ * @property-read mixed $count_faecher additional field
+ * @property-read mixed $kategorie_name additional field
+ * @property-read mixed $kategorie_id additional field
+ * @property-read mixed $count_studiengaenge additional field
+ * @property-read mixed $count_objects additional field
+ * @property-read mixed $count_user additional field
  */
 class Abschluss extends ModuleManagementModelTreeItem implements PrivacyObject
 {
diff --git a/lib/models/AbschlussKategorie.php b/lib/models/AbschlussKategorie.php
index e60520197eabdd81fa30983711c993b2559b40ba..f434062a849c5943ab4c5d30047b3d3abd33f41d 100644
--- a/lib/models/AbschlussKategorie.php
+++ b/lib/models/AbschlussKategorie.php
@@ -12,8 +12,26 @@
  * @license     http://www.gnu.org/licenses/gpl-2.0.html GPL version 2
  * @category    Stud.IP
  * @since       3.5
+ *
+ * @property string $id alias column for kategorie_id
+ * @property string $kategorie_id database column
+ * @property I18NString $name database column
+ * @property I18NString|null $name_kurz database column
+ * @property I18NString|null $beschreibung database column
+ * @property int|null $position database column
+ * @property string $author_id database column
+ * @property string $editor_id database column
+ * @property int $mkdate database column
+ * @property int $chdate database column
+ * @property SimpleORMapCollection|MvvFile[] $documents has_many MvvFile
+ * @property SimpleORMapCollection|MvvFile[] $document_assignments has_many MvvFile
+ * @property SimpleORMapCollection|AbschlussZuord[] $abschluss_assignments has_many AbschlussZuord
+ * @property SimpleORMapCollection|Abschluss[] $abschluesse has_and_belongs_to_many Abschluss
+ * @property-read mixed $count_abschluesse additional field
+ * @property-read mixed $count_studiengaenge additional field
+ * @property-read mixed $count_dokumente additional field
+ * @property-read mixed $count_objects additional field
  */
-
 class AbschlussKategorie extends ModuleManagementModelTreeItem
 {
 
diff --git a/lib/models/AbschlussZuord.php b/lib/models/AbschlussZuord.php
index 9a83e58fc29b4cb7eb3009d95cd70db8a8c90acf..a7b88d19b17fbdacc2e02e041e00f8f1e42b6732 100644
--- a/lib/models/AbschlussZuord.php
+++ b/lib/models/AbschlussZuord.php
@@ -13,6 +13,17 @@
  * @license     http://www.gnu.org/licenses/gpl-2.0.html GPL version 2
  * @category    Stud.IP
  * @since       3.5
+ *
+ * @property string $id alias column for abschluss_id
+ * @property string $abschluss_id database column
+ * @property string $kategorie_id database column
+ * @property int $position database column
+ * @property string $author_id database column
+ * @property string $editor_id database column
+ * @property int $mkdate database column
+ * @property int $chdate database column
+ * @property Abschluss $abschluss belongs_to Abschluss
+ * @property AbschlussKategorie $kategorie belongs_to AbschlussKategorie
  */
 
 class AbschlussZuord extends ModuleManagementModel
diff --git a/lib/models/AdmissionApplication.class.php b/lib/models/AdmissionApplication.class.php
index 4da0c6b83a8d714183f220b4d1afc013db0fff75..a62ebb58951e0e52915eb1ea6f11b59f02c95498 100644
--- a/lib/models/AdmissionApplication.class.php
+++ b/lib/models/AdmissionApplication.class.php
@@ -13,23 +13,24 @@
  * @license     http://www.gnu.org/licenses/gpl-2.0.html GPL version 2
  * @category    Stud.IP
  *
- * @property string user_id database column
- * @property string seminar_id database column
- * @property string status database column
- * @property string mkdate database column
- * @property string position database column
- * @property string comment database column
- * @property string visible database column
- * @property string vorname computed column read/write
- * @property string nachname computed column read/write
- * @property string username computed column read/write
- * @property string email computed column read/write
- * @property string title_front computed column read/write
- * @property string title_rear computed column read/write
- * @property string course_name computed column read/write
- * @property string id computed column read/write
- * @property User user belongs_to User
- * @property Course course belongs_to Course
+ * @property array $id alias for pk
+ * @property string $user_id database column
+ * @property string $seminar_id database column
+ * @property string $status database column
+ * @property int $mkdate database column
+ * @property int|null $chdate database column
+ * @property int|null $position database column
+ * @property string $comment database column
+ * @property string $visible database column
+ * @property User $user belongs_to User
+ * @property Course $course belongs_to Course
+ * @property mixed $vorname additional field
+ * @property mixed $nachname additional field
+ * @property mixed $username additional field
+ * @property mixed $email additional field
+ * @property mixed $title_front additional field
+ * @property mixed $title_rear additional field
+ * @property mixed $course_name additional field
  */
 class AdmissionApplication extends SimpleORMap implements PrivacyObject
 {
diff --git a/lib/models/AdmissionRuleCompatibility.php b/lib/models/AdmissionRuleCompatibility.php
index f3447bc1ceec3ca66bfc46c0c889e42066a4e657..76b2f5763c368d224ecd8d98bfa1859fea7d3229 100644
--- a/lib/models/AdmissionRuleCompatibility.php
+++ b/lib/models/AdmissionRuleCompatibility.php
@@ -14,10 +14,11 @@
  * @category    Stud.IP
  * @since       3.5
  *
- * @property string rule_type database column
- * @property string compat_rule_type database column
- * @property int mkdate database column
- * @property int chdate database column
+ * @property array $id alias for pk
+ * @property string $rule_type database column
+ * @property string $compat_rule_type database column
+ * @property int $mkdate database column
+ * @property int $chdate database column
  */
 class AdmissionRuleCompatibility extends SimpleORMap
 {
diff --git a/lib/models/ArchivedCourse.class.php b/lib/models/ArchivedCourse.class.php
index 9d26c8bf319704222063600ee052a046eb1a9238..81879af2bf6f824c3e3cf280ba1237af159b1824 100644
--- a/lib/models/ArchivedCourse.class.php
+++ b/lib/models/ArchivedCourse.class.php
@@ -13,27 +13,27 @@
  * @license     http://www.gnu.org/licenses/gpl-2.0.html GPL version 2
  * @category    Stud.IP
  *
- * @property string seminar_id database column
- * @property string id alias column for seminar_id
- * @property string name database column
- * @property string untertitel database column
- * @property string beschreibung database column
- * @property string start_time database column
- * @property string semester database column
- * @property string heimat_inst_id database column
- * @property string institute database column
- * @property string dozenten database column
- * @property string fakultaet database column
- * @property string dump database column
- * @property string archiv_file_id database column
- * @property string archiv_protected_file_id database column
- * @property string mkdate database column
- * @property string forumdump database column
- * @property string wikidump database column
- * @property string studienbereiche database column
- * @property string veranstaltungsnummer database column
- * @property SimpleORMapCollection members has_many ArchivedCourseMember
- * @property Institute home_institut belongs_to Institute
+ * @property string $id alias column for seminar_id
+ * @property string $seminar_id database column
+ * @property string $name database column
+ * @property string $untertitel database column
+ * @property string $beschreibung database column
+ * @property int $start_time database column
+ * @property string $semester database column
+ * @property string $heimat_inst_id database column
+ * @property string $institute database column
+ * @property string $dozenten database column
+ * @property string $fakultaet database column
+ * @property string $dump database column
+ * @property string $archiv_file_id database column
+ * @property string $archiv_protected_file_id database column
+ * @property int $mkdate database column
+ * @property string $forumdump database column
+ * @property string|null $wikidump database column
+ * @property string $studienbereiche database column
+ * @property string $veranstaltungsnummer database column
+ * @property SimpleORMapCollection|ArchivedCourseMember[] $members has_many ArchivedCourseMember
+ * @property Institute $home_institut belongs_to Institute
  */
 
 class ArchivedCourse extends SimpleORMap implements PrivacyObject
diff --git a/lib/models/ArchivedCourseMember.class.php b/lib/models/ArchivedCourseMember.class.php
index 536c1b677eab578cde01e2194c06b4fcc7b86b8b..1febd35407092521cf48bdb8418c57a9606ab0b6 100644
--- a/lib/models/ArchivedCourseMember.class.php
+++ b/lib/models/ArchivedCourseMember.class.php
@@ -13,12 +13,12 @@
  * @license     http://www.gnu.org/licenses/gpl-2.0.html GPL version 2
  * @category    Stud.IP
  *
- * @property string seminar_id database column
- * @property string user_id database column
- * @property string status database column
- * @property string id computed column read/write
- * @property User user belongs_to User
- * @property ArchivedCourse course belongs_to ArchivedCourse
+ * @property array $id alias for pk
+ * @property string $seminar_id database column
+ * @property string $user_id database column
+ * @property string $status database column
+ * @property User $user belongs_to User
+ * @property ArchivedCourse $course belongs_to ArchivedCourse
  */
 class ArchivedCourseMember extends SimpleORMap implements PrivacyObject
 {
diff --git a/lib/models/Aufbaustudiengang.php b/lib/models/Aufbaustudiengang.php
index 9fba6e76eacc9b753a17803690caffdf70b5507e..03913de843dd376086e58f5481afdee3e55f08d7 100644
--- a/lib/models/Aufbaustudiengang.php
+++ b/lib/models/Aufbaustudiengang.php
@@ -12,8 +12,19 @@
  * @license     http://www.gnu.org/licenses/gpl-2.0.html GPL version 2
  * @category    Stud.IP
  * @since       4.4
+ *
+ * @property int $id database column
+ * @property string $grund_stg_id database column
+ * @property string $aufbau_stg_id database column
+ * @property string $typ database column
+ * @property I18NString|null $kommentar database column
+ * @property string $author_id database column
+ * @property string $editor_id database column
+ * @property int $mkdate database column
+ * @property int $chdate database column
+ * @property Studiengang $grund_studiengang belongs_to Studiengang
+ * @property Studiengang $aufbau_studiengang has_one Studiengang
  */
-
 class Aufbaustudiengang extends ModuleManagementModel
 {
     protected static function configure($config = [])
diff --git a/lib/models/AuthUserMd5.class.php b/lib/models/AuthUserMd5.class.php
index 5879cb94836635d6960a2e65d54ddc0c8b93f459..48e27f8462aff599efec1e8fe35c68ef07449b1b 100644
--- a/lib/models/AuthUserMd5.class.php
+++ b/lib/models/AuthUserMd5.class.php
@@ -13,20 +13,20 @@
  * @license     http://www.gnu.org/licenses/gpl-2.0.html GPL version 2
  * @category    Stud.IP
  *
- * @property string user_id database column
- * @property string id alias column for user_id
- * @property string username database column
- * @property string password database column
- * @property string perms database column
- * @property string vorname database column
- * @property string nachname database column
- * @property string email database column
- * @property string validation_key database column
- * @property string auth_plugin database column
- * @property string locked database column
- * @property string lock_comment database column
- * @property string locked_by database column
- * @property string visible database column
+ * @property string $id alias column for user_id
+ * @property string $user_id database column
+ * @property string $username database column
+ * @property string $password database column
+ * @property string $perms database column
+ * @property string $vorname database column
+ * @property string $nachname database column
+ * @property string $email database column
+ * @property string $validation_key database column
+ * @property string|null $auth_plugin database column
+ * @property int $locked database column
+ * @property string|null $lock_comment database column
+ * @property string|null $locked_by database column
+ * @property string $visible database column
  */
 
 class AuthUserMd5 extends SimpleORMap
diff --git a/lib/models/AuxLockRule.php b/lib/models/AuxLockRule.php
index 4bf8e8bcf257dc2f26d13ff36164966814472c0a..abd3327bb5fcf4ad2b7f0409e8c5bf95356b8135 100644
--- a/lib/models/AuxLockRule.php
+++ b/lib/models/AuxLockRule.php
@@ -14,15 +14,16 @@
  * @category    Stud.IP
  * @since       3.0
  *
- * @property string lock_id database column
- * @property string id alias column for lock_id
- * @property string name database column
- * @property string description database column
- * @property JSONArrayObject attributes database column
- * @property JSONArrayObject sorting database column
- * @property array datafields computed column
- * @property string order computed column
- * @property Course[]|SimpleORMapCollection courses has_and_belongs_to_many Courses
+ * @property string $id alias column for lock_id
+ * @property string $lock_id database column
+ * @property I18NString $name database column
+ * @property I18NString $description database column
+ * @property JSONArrayObject $attributes database column
+ * @property JSONArrayObject $sorting database column
+ * @property int|null $mkdate database column
+ * @property int|null $chdate database column
+ * @property SimpleORMapCollection|Course[] $courses has_many Course
+ * @property mixed $datafields additional field
  */
 class AuxLockRule extends SimpleORMap
 {
diff --git a/lib/models/Banner.class.php b/lib/models/Banner.class.php
index 7f3309bfaf3eaf94fa37a25e8a8abc9d6410ac79..a4187604b09628a0405fe6130e46f8807c4492d3 100644
--- a/lib/models/Banner.class.php
+++ b/lib/models/Banner.class.php
@@ -14,20 +14,21 @@
  * @package     admin
  * @since       2.4
  *
- * @property string ad_id database column
- * @property string id alias column for ad_id
- * @property string banner_path database column
- * @property string description database column
- * @property string alttext database column
- * @property string target_type database column
- * @property string target database column
- * @property string startdate database column
- * @property string enddate database column
- * @property string priority database column
- * @property string views database column
- * @property string clicks database column
- * @property string mkdate database column
- * @property string chdate database column
+ * @property string $id alias column for ad_id
+ * @property string $ad_id database column
+ * @property string $banner_path database column
+ * @property string|null $description database column
+ * @property string|null $alttext database column
+ * @property string $target_type database column
+ * @property string $target database column
+ * @property int $startdate database column
+ * @property int $enddate database column
+ * @property int $priority database column
+ * @property int $views database column
+ * @property int $clicks database column
+ * @property int $mkdate database column
+ * @property int $chdate database column
+ * @property SimpleORMapCollection|BannerRoles[] $banner_roles has_many BannerRoles
  */
 
 class Banner extends SimpleORMap
diff --git a/lib/models/BannerRoles.class.php b/lib/models/BannerRoles.class.php
index 82f5722ae3b66977effb168eda42bc450b547fb6..d1c29865317b16edc029476abd39c17dba7c8b38 100644
--- a/lib/models/BannerRoles.class.php
+++ b/lib/models/BannerRoles.class.php
@@ -14,8 +14,10 @@
  * @package     admin
  * @since       5.1
  *
- * @property string ad_id database column
- * @property int roleid database column
+ * @property array $id alias for pk
+ * @property string $ad_id database column
+ * @property int $roleid database column
+ * @property Banner $banner_ads belongs_to Banner
  */
 
 class BannerRoles extends SimpleORMap
diff --git a/lib/models/BlubberComment.php b/lib/models/BlubberComment.php
index 3e076af093a3366aaab9c6df672df9aae0539e98..dff5da9d33985b96e320f92420258c40569eeb68 100644
--- a/lib/models/BlubberComment.php
+++ b/lib/models/BlubberComment.php
@@ -13,7 +13,18 @@
  * @category    Stud.IP
  * @since       4.5
  *
- * @property BlubberThread thread related thread
+ * @property string $id alias column for comment_id
+ * @property string $comment_id database column
+ * @property string $thread_id database column
+ * @property string $user_id database column
+ * @property int $external_contact database column
+ * @property string|null $content database column
+ * @property string|null $network database column
+ * @property int|null $chdate database column
+ * @property int|null $mkdate database column
+ * @property BlubberThread $thread belongs_to BlubberThread
+ * @property User $user belongs_to User
+ * @property ExternalUser $external_user belongs_to ExternalUser
  */
 
 class BlubberComment extends SimpleORMap implements PrivacyObject
diff --git a/lib/models/BlubberGlobalThread.php b/lib/models/BlubberGlobalThread.php
index b19a7f96e6129c0f2ce70cdf8a701a2536b02801..3279b87fbbf51fe5ff6d8bd548cc6a317cad4862 100644
--- a/lib/models/BlubberGlobalThread.php
+++ b/lib/models/BlubberGlobalThread.php
@@ -1,5 +1,26 @@
 <?php
 
+/**
+ * @license GPL2 or any later version
+ *
+ * @property string $id alias column for thread_id
+ * @property string $thread_id database column
+ * @property string $context_type database column
+ * @property string $context_id database column
+ * @property string $user_id database column
+ * @property int $external_contact database column
+ * @property string|null $content database column
+ * @property string|null $display_class database column
+ * @property int $visible_in_stream database column
+ * @property int $commentable database column
+ * @property JSONArrayObject|null $metadata database column
+ * @property int|null $chdate database column
+ * @property int|null $mkdate database column
+ * @property SimpleORMapCollection|BlubberComment[] $comments has_many BlubberComment
+ * @property SimpleORMapCollection|BlubberMention[] $mentions has_many BlubberMention
+ * @property SimpleORMapCollection|ObjectUserVisit[] $visits has_many ObjectUserVisit
+ * @property User $user belongs_to User
+ */
 class BlubberGlobalThread extends BlubberThread
 {
     public function isReadable(string $user_id = null)
diff --git a/lib/models/BlubberMention.php b/lib/models/BlubberMention.php
index c2a5008d2daa6564eff3b450a25352b3d01c46c0..bd9b586b1e79c78f55c69655b30437aa55acd211 100644
--- a/lib/models/BlubberMention.php
+++ b/lib/models/BlubberMention.php
@@ -3,6 +3,15 @@
  * @author    Jan-Hendrik Willms <tleilax+studip@gmail.com>
  * @license   GPL2 or any later version
  * @since     4.5
+ *
+ * @property int $id alias column for mention_id
+ * @property int $mention_id database column
+ * @property string $thread_id database column
+ * @property string $user_id database column
+ * @property int $external_contact database column
+ * @property int $mkdate database column
+ * @property BlubberThread $thread belongs_to BlubberThread
+ * @property User $user belongs_to User
  */
 
 class BlubberMention extends SimpleORMap
diff --git a/lib/models/BlubberStatusgruppeThread.php b/lib/models/BlubberStatusgruppeThread.php
index bd9e443351bd4080a68f419cc4f2ead2b88c4e00..63e67a4d379374d1c048be457e2516140f654afc 100644
--- a/lib/models/BlubberStatusgruppeThread.php
+++ b/lib/models/BlubberStatusgruppeThread.php
@@ -1,5 +1,27 @@
 <?php
 
+/**
+ * @license GPL2 or any later version
+ *
+ * @property string $id alias column for thread_id
+ * @property string $thread_id database column
+ * @property string $context_type database column
+ * @property string $context_id database column
+ * @property string $user_id database column
+ * @property int $external_contact database column
+ * @property string|null $content database column
+ * @property string|null $display_class database column
+ * @property int $visible_in_stream database column
+ * @property int $commentable database column
+ * @property JSONArrayObject|null $metadata database column
+ * @property int|null $chdate database column
+ * @property int|null $mkdate database column
+ * @property SimpleORMapCollection|BlubberComment[] $comments has_many BlubberComment
+ * @property SimpleORMapCollection|BlubberMention[] $mentions has_many BlubberMention
+ * @property SimpleORMapCollection|ObjectUserVisit[] $visits has_many ObjectUserVisit
+ * @property Statusgruppen $statusgruppe belongs_to Statusgruppen
+ * @property User $user belongs_to User
+ */
 class BlubberStatusgruppeThread extends BlubberThread
 {
     protected static function configure($config = [])
diff --git a/lib/models/BlubberThread.php b/lib/models/BlubberThread.php
index 52465d2fe1fd9bad0e341981928d44d7025d50ed..d3a4de660a9c48f54e92f85d2a271dd34d0ac5c5 100644
--- a/lib/models/BlubberThread.php
+++ b/lib/models/BlubberThread.php
@@ -12,6 +12,24 @@
  * @license     http://www.gnu.org/licenses/gpl-2.0.html GPL version 2
  * @category    Stud.IP
  * @since       4.5
+ *
+ * @property string $id alias column for thread_id
+ * @property string $thread_id database column
+ * @property string $context_type database column
+ * @property string $context_id database column
+ * @property string $user_id database column
+ * @property int $external_contact database column
+ * @property string|null $content database column
+ * @property string|null $display_class database column
+ * @property int $visible_in_stream database column
+ * @property int $commentable database column
+ * @property JSONArrayObject|null $metadata database column
+ * @property int|null $chdate database column
+ * @property int|null $mkdate database column
+ * @property SimpleORMapCollection|BlubberComment[] $comments has_many BlubberComment
+ * @property SimpleORMapCollection|BlubberMention[] $mentions has_many BlubberMention
+ * @property SimpleORMapCollection|ObjectUserVisit[] $visits has_many ObjectUserVisit
+ * @property User $user belongs_to User
  */
 
 class BlubberThread extends SimpleORMap implements PrivacyObject
@@ -47,7 +65,7 @@ class BlubberThread extends SimpleORMap implements PrivacyObject
             'on_delete'         => 'delete',
         ];
 
-        $config['serialized_fields']['metadata'] = 'JSONArrayObject';
+        $config['serialized_fields']['metadata'] = JSONArrayObject::class;
 
         parent::configure($config);
     }
diff --git a/lib/models/CacheType.php b/lib/models/CacheType.php
index 78b9994e5974b86448bb77e335fd88a1945347e8..d1a4ae1a9e0a8850a29f63143eacffd1e88c4a1d 100644
--- a/lib/models/CacheType.php
+++ b/lib/models/CacheType.php
@@ -13,11 +13,12 @@
  * @license     http://www.gnu.org/licenses/gpl-2.0.html GPL version 2
  * @category    Stud.IP
  *
- * @property string cache_id database column
- * @property string class_name database column
- * @property string display_name database column
- * @property int mkdate database column
- * @property int chdate database column
+ * @property int $id alias column for cache_id
+ * @property int $cache_id database column
+ * @property string $class_name database column
+ * @property int|null $chdate database column
+ * @property int|null $mkdate database column
+ * @property mixed $display_name additional field
  */
 
 class CacheType extends SimpleORMap
diff --git a/lib/models/CalendarEvent.class.php b/lib/models/CalendarEvent.class.php
index 96cc8699777d28f9935d15195583fb3159b186d2..16ca91aab0047e882d430b35f292cdc3c80f836c 100644
--- a/lib/models/CalendarEvent.class.php
+++ b/lib/models/CalendarEvent.class.php
@@ -12,18 +12,27 @@
  * @license     http://www.gnu.org/licenses/gpl-2.0.html GPL version 2
  * @category    Stud.IP
  *
- * @property string event_id database column
- * @property string range_id database column
- * @property string group_status database column
- * @property string mkdate database column
- * @property string chdate database column
- * @property string type computed column
- * @property string name computed column
- * @property string id computed column read/write
- * @property user user belongs_to User
- * @property course course belongs_to Course
- * @property institute institute belongs_to Institute
- * @property event belongs_to CalendarEvent
+ * @property array $id alias for pk
+ * @property string $range_id database column
+ * @property string $event_id database column
+ * @property int $group_status database column
+ * @property int $mkdate database column
+ * @property int $chdate database column
+ * @property SimpleORMapCollection|CalendarEvent[] $attendees has_many CalendarEvent
+ * @property SimpleORMapCollection|ConsultationEvent[] $consultation_events has_many ConsultationEvent
+ * @property User $user belongs_to User
+ * @property Course $course belongs_to Course
+ * @property Institute $institute belongs_to Institute
+ * @property ConsultationBooking $consultation_booking belongs_to ConsultationBooking
+ * @property EventData $event has_one EventData
+ * @property mixed $type additional field
+ * @property mixed $name additional field
+ * @property mixed $author_id additional field
+ * @property mixed $editor_id additional field
+ * @property mixed $title additional field
+ * @property mixed $start additional field
+ * @property mixed $end additional field
+ * @property-read mixed $owner additional field
  */
 class CalendarEvent extends SimpleORMap implements Event, PrivacyObject
 {
diff --git a/lib/models/CalendarUser.class.php b/lib/models/CalendarUser.class.php
index 02fdfceda230066f0a323f88c5895c8d75dc477d..f079ac67c881e4f79a6d626b74d82bf712c93df2 100644
--- a/lib/models/CalendarUser.class.php
+++ b/lib/models/CalendarUser.class.php
@@ -11,6 +11,17 @@
  * @license     http://www.gnu.org/licenses/gpl-2.0.html GPL version 2
  * @category    Stud.IP
  * @since       3.2
+ *
+ * @property array $id alias for pk
+ * @property string $owner_id database column
+ * @property string $user_id database column
+ * @property int $permission database column
+ * @property int $mkdate database column
+ * @property int $chdate database column
+ * @property User $user belongs_to User
+ * @property User $owner has_one User
+ * @property-read mixed $nachname additional field
+ * @property-read mixed $vorname additional field
  */
 
 class CalendarUser extends SimpleORMap
diff --git a/lib/models/Clipboard.class.php b/lib/models/Clipboard.class.php
index 2f4d0f2436ba22ac28a6ebc258498fce087a5930..cd8fe89a994e20023b458171e45a22c0dfd87c06 100644
--- a/lib/models/Clipboard.class.php
+++ b/lib/models/Clipboard.class.php
@@ -4,6 +4,11 @@
 /**
  * Clipboard.class.php - model class for a clipboard (Merkzettel)
  *
+ * The Clipboard class extends the wish list functionality of the clipboard
+ * in the old literature management to allow it to be used in other areas of the
+ * Stud.IP system. Furthermore, clipboards managed by this class
+ * are stored permanently in the database until they are deleted.
+ *
  * 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
@@ -14,30 +19,25 @@
  * @license     http://www.gnu.org/licenses/gpl-2.0.html GPL version 2
  * @category    Stud.IP
  * @since       4.5
- */
-
-
-/**
- * The Clipboard class extends the wish list functionality of the clipboard
- * in the old literature management to allow it to be used in other areas of the
- * Stud.IP system. Furthermore, clipboards managed by this class
- * are stored permanently in the database until they are deleted.
  *
- * @property string id database column
- * @property string user_id database column
- * @property string name database column: The name of the clipboard.
- * @property string allowed_item_class database column: The StudipItem class
- *     name where items have to be children of in order to be used
- *     with the clipboard.
- *     This attribute defaults to 'StudipItem' which means that by default
- *     all implementations of StudipItem can be inserted into a clipboard.
- *     If only items of a special implementation of StudipItem shall be
- *     able to be inserted into the clipboard this attribute has to be set
- *     to the class name of that implementation.
- * @property string mkdate database column
- * @property string chdate database column
- * @property SimpleORMapCollection user belongs_to User
- * @property SimpleORMapCollection items has_many WishListItem
+ * The "allowed_item_class" column containts the StudipItem class
+ * name where items have to be children of in order to be used
+ * with the clipboard.
+ * This attribute defaults to 'StudipItem' which means that by default
+ * all implementations of StudipItem can be inserted into a clipboard.
+ * If only items of a special implementation of StudipItem shall be
+ * able to be inserted into the clipboard this attribute has to be set
+ * to the class name of that implementation.
+ *
+ * @property int $id database column
+ * @property string $user_id database column
+ * @property string $name database column
+ * @property string $handler database column
+ * @property string $allowed_item_class database column
+ * @property int $mkdate database column
+ * @property int $chdate database column
+ * @property SimpleORMapCollection|ClipboardItem[] $items has_many ClipboardItem
+ * @property User $user belongs_to User
  */
 class Clipboard extends SimpleORMap
 {
diff --git a/lib/models/ClipboardItem.class.php b/lib/models/ClipboardItem.class.php
index b5199ed09f2d20cbb1409ea2d8c4c576161b37b5..030388a8e601c2892b42d8c5746991899ef5dc96 100644
--- a/lib/models/ClipboardItem.class.php
+++ b/lib/models/ClipboardItem.class.php
@@ -1,10 +1,10 @@
 <?php
-
-
 /**
  * ClipboardItem.class.php - model class for clipboard items
  * (Merkzettel-Einträge)
  *
+ * The ClipboardItem class holds single items of a clipboard.
+ *
  * 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
@@ -15,21 +15,14 @@
  * @license     http://www.gnu.org/licenses/gpl-2.0.html GPL version 2
  * @category    Stud.IP
  * @since       4.5
- */
-
-
-/**
- * The ClipboardItem class holds single items of a clipboard.
  *
- * @property string id database column
- * @property string clipboard_id database column
- * @property string range_id database column: The ID of the Stud.IP object
- *     which is stored in this clipboard item.
- * @property string range_type database column: The StudipItem class
- *     corresponding to the range-ID specified in the range_id column.
- * @property string mkdate database column
- * @property string chdate database column
- * @property SimpleORMapCollection clipboard belongs_to Clipboard
+ * @property int $id database column
+ * @property int $clipboard_id database column
+ * @property string $range_id database column
+ * @property string $range_type database column
+ * @property int $mkdate database column
+ * @property int $chdate database column
+ * @property Clipboard $clipboard belongs_to Clipboard
  */
 class ClipboardItem extends SimpleORMap
 {
@@ -48,7 +41,7 @@ class ClipboardItem extends SimpleORMap
 
 
     /**
-     * @returns A string representation of this clipboard item.
+     * @returns string representation of this clipboard item.
      */
     public function __toString()
     {
diff --git a/lib/models/ColourValue.class.php b/lib/models/ColourValue.class.php
index 9b1a899d8aa58f1b6bfee54b5db353247762d483..6ae05ad2706ac64234f1aff126739829a1530012 100644
--- a/lib/models/ColourValue.class.php
+++ b/lib/models/ColourValue.class.php
@@ -4,6 +4,9 @@
  * ColorValue.class.php
  * model class for table color_values
  *
+ * Objects of this class holds a colour's name (its purpose)
+ * and the value for the colour.
+ *
  * 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
@@ -14,28 +17,13 @@
  * @since       4.5
  * @license     http://www.gnu.org/licenses/gpl-2.0.html GPL version 2
  * @category    Stud.IP
- */
-
-
-/**
- * Objects of this class holds a colour's name (its purpose)
- * and the value for the colour.
- *
- * @property string colour_id database column: An unique identifier for the colour.
- *     Recommendation for identifier naming for core system colours:
- *     <component>.<sub-component (optional)>.<colour name>.<colour variant>
- *     Example:
- *     Resources.BookingPlan.Reservation.Bg for the background colour
- *     of a reservation in a resource's booking plan.
- *
- *     Plugins should use the plugin name as component.
  *
- * @property string value database column:
- *     The colour value in the hexadecimal format RRGGBBAA
- *     (see CSS Color Module Level 4).
- * @property string description database column
- * @property string mkdate database column
- * @property string chdate database column
+ * @property string $id alias column for colour_id
+ * @property string $colour_id database column
+ * @property I18NString $description database column
+ * @property string $value database column
+ * @property int $mkdate database column
+ * @property int $chdate database column
  */
 class ColourValue extends SimpleORMap
 {
diff --git a/lib/models/ConfigEntry.class.php b/lib/models/ConfigEntry.class.php
index dd91dc69393c0f968a71e170a9ccfa44145d6492..5e06da8a8ab5cb4052445c46c8b9fc1917c28d4b 100644
--- a/lib/models/ConfigEntry.class.php
+++ b/lib/models/ConfigEntry.class.php
@@ -13,15 +13,15 @@
  * @license     http://www.gnu.org/licenses/gpl-2.0.html GPL version 2
  * @category    Stud.IP
  *
- * @property string id alias column for field
- * @property string field database column
- * @property string value database column
- * @property string type database column
- * @property string range database column
- * @property string section database column
- * @property string mkdate database column
- * @property string chdate database column
- * @property string description database column
+ * @property string $id alias column for field
+ * @property string $field database column
+ * @property string $value database column
+ * @property string $type database column
+ * @property string $range database column
+ * @property string $section database column
+ * @property int $mkdate database column
+ * @property int $chdate database column
+ * @property string $description database column
  */
 
 class ConfigEntry extends SimpleORMap
diff --git a/lib/models/ConfigValue.php b/lib/models/ConfigValue.php
index f5410c93a0c22698227d67e039620abfe542ca8f..0b9724802cbf6912848794d1fb66a64f8d8a3755 100644
--- a/lib/models/ConfigValue.php
+++ b/lib/models/ConfigValue.php
@@ -13,15 +13,14 @@
  *
  * @category    Stud.IP
  *
- * @property array $id
- * @property string $field
- * @property string $range_id
- * @property string $value
- * @property int $mkdate
- * @property int $chdate
- * @property string $comment
- *
- * @property ConfigEntry $entry
+ * @property array $id alias for pk
+ * @property string $field database column
+ * @property string $range_id database column
+ * @property string $value database column
+ * @property int $mkdate database column
+ * @property int $chdate database column
+ * @property string $comment database column
+ * @property ConfigEntry $entry belongs_to ConfigEntry
  */
 
 class ConfigValue extends SimpleORMap
diff --git a/lib/models/ConsultationBlock.php b/lib/models/ConsultationBlock.php
index f35e98b8359dd190ce9a434923c96ad1f4d74b35..ea792d8af669899ce989518765b5b1e522e7bbc5 100644
--- a/lib/models/ConsultationBlock.php
+++ b/lib/models/ConsultationBlock.php
@@ -10,30 +10,29 @@
  *       method when the dev board finally fully supports PHP7 since that
  *       required "yield from".
  *
- * @property string $id alias column for block_id
- * @property string $block_id database column
+ * @property int $id alias column for block_id
+ * @property int $block_id database column
  * @property string $range_id database column
  * @property string $range_type database column
  * @property int $start database column
  * @property int $end database column
  * @property string $room database column
- * @property bool $calendar_events database column
- * @property bool $show_participants database column
- * @property bool $require_reason database column
- * @property string $confirmation_text database column
+ * @property int $calendar_events database column
+ * @property int $show_participants database column
+ * @property string $require_reason database column
+ * @property string|null $confirmation_text database column
  * @property string $note database column
- * @property string $size database column
- * @property int $lock_time
+ * @property int $size database column
+ * @property int|null $lock_time database column
  * @property int $mkdate database column
  * @property int $chdate database column
- *
- * @property bool $has_bookings computed column
- * @property string $range_display
- * @property bool $is_expired
- * @property Range $range computed column
- * @property ConsultationSlot[]|SimpleORMapCollection $slots has_many ConsultationSlot
- * @property ConsultationResponsibility[]|SimpleCollection $responsibilities has_many ConsultationResponsibility
- * @property User[] $responsible_persons
+ * @property SimpleORMapCollection|ConsultationSlot[] $slots has_many ConsultationSlot
+ * @property SimpleORMapCollection|ConsultationResponsibility[] $responsibilities has_many ConsultationResponsibility
+ * @property mixed $range additional field
+ * @property-read mixed $range_display additional field
+ * @property-read mixed $has_bookings additional field
+ * @property-read mixed $is_expired additional field
+ * @property-read mixed $responsible_persons additional field
  */
 class ConsultationBlock extends SimpleORMap implements PrivacyObject
 {
diff --git a/lib/models/ConsultationBooking.php b/lib/models/ConsultationBooking.php
index 1903249d6a2710bc65f56980758737ccb69d5b8b..06e6967c2a52a972afb98bd659a5fb3ef2823e8d 100644
--- a/lib/models/ConsultationBooking.php
+++ b/lib/models/ConsultationBooking.php
@@ -5,15 +5,18 @@
  * @author  Jan-Hendrik Willms <tleilax+studip@gmail.com>
  * @license GPL2 or any later version
  * @since   Stud.IP 4.3
- * @property string booking_id database column
- * @property string id alias column for booking_id
- * @property string slot_id database column
- * @property string user_id database column
- * @property string reason database column
- * @property string student_event_id database column
- * @property ConsultationSlot slot belongs_to ConsultationSlot
- * @property User user belongs_to User
- * @property EventData event has_one EventData
+ *
+ * @property int $id alias column for booking_id
+ * @property int $booking_id database column
+ * @property int $slot_id database column
+ * @property string $user_id database column
+ * @property string|null $reason database column
+ * @property string|null $student_event_id database column
+ * @property int $mkdate database column
+ * @property int $chdate database column
+ * @property ConsultationSlot $slot belongs_to ConsultationSlot
+ * @property User $user belongs_to User
+ * @property EventData|null $event has_one EventData
  */
 class ConsultationBooking extends SimpleORMap implements PrivacyObject
 {
diff --git a/lib/models/ConsultationEvent.php b/lib/models/ConsultationEvent.php
index afc69805ffd52bb1f72d202dfb652a567f24591b..2665c6be1ba1dd19b004ec5c0ad6e134cff2fd9b 100644
--- a/lib/models/ConsultationEvent.php
+++ b/lib/models/ConsultationEvent.php
@@ -4,13 +4,13 @@
  * @license GPL2 or any later version
  * @since   Stud.IP 5.1
  *
- * @property int slot_id database column
- * @property int id alias column for slot_id
- * @property string user_id database column
- * @property string event_id database column
- * @property int mkdate database column
- * @property ConsultationSlot slot belongs_to ConsultationSlot
- * @property EventData event belongs_to Event
+ * @property array $id alias for pk
+ * @property int $slot_id database column
+ * @property string $user_id database column
+ * @property string $event_id database column
+ * @property int $mkdate database column
+ * @property ConsultationSlot $slot belongs_to ConsultationSlot
+ * @property EventData $event has_one EventData
  */
 class ConsultationEvent extends SimpleORMap
 {
diff --git a/lib/models/ConsultationResponsibility.php b/lib/models/ConsultationResponsibility.php
index 72cd12eb16ba89b042742f969fa8cef4ce1296ed..a446a732fa60cac301513f75b0d579223d0666ee 100644
--- a/lib/models/ConsultationResponsibility.php
+++ b/lib/models/ConsultationResponsibility.php
@@ -4,11 +4,12 @@
  * @license GPL2 or any later version
  * @since   Stud.IP 5.1
  *
- * @property int block_id database column
- * @property int id alias column for block_id
- * @property string range_id database column
- * @property string range_type database column
- * @property int mkdate database column
+ * @property array $id alias for pk
+ * @property int $block_id database column
+ * @property string $range_id database column
+ * @property string $range_type database column
+ * @property int $mkdate database column
+ * @property ConsultationBlock $block belongs_to ConsultationBlock
  */
 class ConsultationResponsibility extends SimpleORMap
 {
diff --git a/lib/models/ConsultationSlot.php b/lib/models/ConsultationSlot.php
index ab1dfa7ea3fe66d1bbb881cf7c346dfd94548b92..b9881900b18b930117fa5425af98a88e9a9f7ee3 100644
--- a/lib/models/ConsultationSlot.php
+++ b/lib/models/ConsultationSlot.php
@@ -5,15 +5,20 @@
  * @author  Jan-Hendrik Willms <tleilax+studip@gmail.com>
  * @license GPL2 or any later version
  * @since   Stud.IP 4.3
- * @property string slot_id database column
- * @property string id alias column for slot_id
- * @property string block_id database column
- * @property string start_time database column
- * @property string end_time database column
- * @property string note database column
- * @property SimpleORMapCollection bookings has_many ConsultationBooking
- * @property ConsultationBlock block belongs_to ConsultationBlock
- * @property SimpleORMapCollection events has_many EventData
+ *
+ * @property int $id alias column for slot_id
+ * @property int $slot_id database column
+ * @property int $block_id database column
+ * @property int $start_time database column
+ * @property int $end_time database column
+ * @property string $note database column
+ * @property int $mkdate database column
+ * @property int $chdate database column
+ * @property SimpleORMapCollection|ConsultationBooking[] $bookings has_many ConsultationBooking
+ * @property SimpleORMapCollection|ConsultationEvent[] $events has_many ConsultationEvent
+ * @property ConsultationBlock $block belongs_to ConsultationBlock
+ * @property-read mixed $has_bookings additional field
+ * @property-read mixed $is_expired additional field
  */
 class ConsultationSlot extends SimpleORMap
 {
@@ -51,10 +56,10 @@ class ConsultationSlot extends SimpleORMap
             }
         };
 
-        $config['additional_fields']['has_bookings']['get'] = function ($slot) {
+        $config['additional_fields']['has_bookings']['get'] = function ($slot): bool {
             return count($slot->bookings) > 0;
         };
-        $config['additional_fields']['is_expired']['get'] = function ($slot) {
+        $config['additional_fields']['is_expired']['get'] = function ($slot): bool {
             return $slot->end_time < time();
         };
 
diff --git a/lib/models/Contact.class.php b/lib/models/Contact.class.php
index 32eae2c74f647bbaad893e44713cc3c1f61d824e..be095de1f12dda49c7ff31fae7fb32923272fdb5 100644
--- a/lib/models/Contact.class.php
+++ b/lib/models/Contact.class.php
@@ -5,15 +5,14 @@
  *
  * @author      <mlunzena@uos.de>
  * @license GPL 2 or later
- * @property string contact_id database column
- * @property string id alias column for contact_id
- * @property string owner_id database column
- * @property string user_id database column
- * @property string buddy database column
- * @property string calpermission database column
- * @property SimpleORMapCollection group_assignments has_many StatusgruppeUser
- * @property User owner belongs_to User
- * @property User friend belongs_to User
+ *
+ * @property array $id alias for pk
+ * @property string $owner_id database column
+ * @property string $user_id database column
+ * @property int|null $mkdate database column
+ * @property SimpleORMapCollection|StatusgruppeUser[] $group_assignments has_many StatusgruppeUser
+ * @property User $owner belongs_to User
+ * @property User $friend belongs_to User
  */
 class Contact extends SimpleORMap
 {
diff --git a/lib/models/ContentTermsOfUse.class.php b/lib/models/ContentTermsOfUse.class.php
index 0e939a4cd8a9bc510fccecf839d0928a741c9ae5..fb2e592cf686f45e8af64f53d106b7414fa826c3 100644
--- a/lib/models/ContentTermsOfUse.class.php
+++ b/lib/models/ContentTermsOfUse.class.php
@@ -20,19 +20,24 @@
  * @license     http://www.gnu.org/licenses/gpl-2.0.html GPL version 2
  * @category    Stud.IP
  *
- * @property string id database column: ID of the content terms of use object
- * @property string name database column: Short name of the terms of use object
- * @property string position database column: sorting of the entries can be made possible with this attribute
- * @property string description database column: Description text of the terms of use object
- * @property int download_condition: database column
- *      0 = no conditions (downloadable by anyone)
- *      1 = closed groups (e.g. courses with signup rules)
- *      2 = only for owner
- * @property string icon database column: either the name of the icon or the URL that points to the icon
+ * @property string $id database column
+ * @property I18NString $name database column
+ * @property int $position database column
+ * @property I18NString $description database column
+ * @property I18NString $student_description database column
+ * @property int $download_condition database column
+ * @property string $icon database column
+ * @property int $is_default database column
+ * @property int $mkdate database column
+ * @property int $chdate database column
  */
 
 class ContentTermsOfUse extends SimpleORMap
 {
+    const DOWNLOAD_CONDITION_NONE = 0; // no conditions (downloadable by anyone)
+    const DOWNLOAD_CONDITION_CLOSED_GROUPS = 1; // closed groups (e.g. courses with signup rules)
+    const DOWNLOAD_CONDITION_OWNER_ONLY = 2; // only for owner
+
     /**
      * @var
      */
@@ -49,7 +54,7 @@ class ContentTermsOfUse extends SimpleORMap
         $config['i18n_fields']['description'] = true;
         $config['i18n_fields']['student_description'] = true;
 
-        $config['default_values']['download_condition'] = 0;
+        $config['default_values']['download_condition'] = self::DOWNLOAD_CONDITION_NONE;
         $config['default_values']['icon'] = 'license';
         $config['default_values']['position'] = 0;
         $config['default_values']['is_default'] = false;
@@ -104,9 +109,9 @@ class ContentTermsOfUse extends SimpleORMap
     public static function getConditions()
     {
         return [
-            0 => _('Ohne Bedingung'),
-            1 => _('Nur innerhalb geschlossener Veranstaltungen erlaubt'),
-            2 => _('Nur für EigentümerIn erlaubt'),
+            self::DOWNLOAD_CONDITION_NONE => _('Ohne Bedingung'),
+            self::DOWNLOAD_CONDITION_CLOSED_GROUPS => _('Nur innerhalb geschlossener Veranstaltungen erlaubt'),
+            self::DOWNLOAD_CONDITION_OWNER_ONLY => _('Nur für EigentümerIn erlaubt'),
         ];
     }
 
@@ -119,9 +124,7 @@ class ContentTermsOfUse extends SimpleORMap
     public static function describeCondition($condition)
     {
         $conditions = self::getConditions();
-        return isset($conditions[$condition])
-             ? $conditions[$condition]
-             : _('Nicht definiert');
+        return $conditions[$condition] ?? _('Nicht definiert');
     }
 
     /**
@@ -192,7 +195,7 @@ class ContentTermsOfUse extends SimpleORMap
                 return true;
             }
         }
-        if ($this->download_condition == 1) {
+        if ($this->download_condition == self::DOWNLOAD_CONDITION_CLOSED_GROUPS) {
 
             //the content is only downloadable when the user is inside a closed group
             //(referenced by range_id). If download_condition is set to 2
@@ -213,7 +216,7 @@ class ContentTermsOfUse extends SimpleORMap
             return false;
         }
 
-        if ($this->download_condition == 2) {
+        if ($this->download_condition == self::DOWNLOAD_CONDITION_OWNER_ONLY) {
             return false;
         }
 
diff --git a/lib/models/Course.class.php b/lib/models/Course.class.php
index 900537332018e8d74edd5e69d5c0e5d9d2816d6b..c449922b65e9e0e6a95f3bb6abf38b3da341276c 100644
--- a/lib/models/Course.class.php
+++ b/lib/models/Course.class.php
@@ -13,64 +13,71 @@
  * @license     http://www.gnu.org/licenses/gpl-2.0.html GPL version 2
  * @category    Stud.IP
  *
- * @property string seminar_id database column
- * @property string id alias column for seminar_id
- * @property string veranstaltungsnummer database column
- * @property string institut_id database column
- * @property string name database column
- * @property string untertitel database column
- * @property string status database column
- * @property string beschreibung database column
- * @property string ort database column
- * @property string sonstiges database column
- * @property string lesezugriff database column
- * @property string schreibzugriff database column
- * @property string start_time database column
- * @property string duration_time database column
- * @property string art database column
- * @property string teilnehmer database column
- * @property string vorrausetzungen database column
- * @property string lernorga database column
- * @property string leistungsnachweis database column
- * @property string mkdate database column
- * @property string chdate database column
- * @property string ects database column
- * @property string admission_turnout database column
- * @property string admission_binding database column
- * @property string admission_prelim database column
- * @property string admission_prelim_txt database column
- * @property string admission_disable_waitlist database column
- * @property string visible database column
- * @property string showscore database column
- * @property string modules database column
- * @property string aux_lock_rule database column
- * @property string aux_lock_rule_forced database column
- * @property string lock_rule database column
- * @property string admission_waitlist_max database column
- * @property string admission_disable_waitlist_move database column
- * @property string completion database column
- * @property string parent_course database column
- * @property string end_time computed column read/write
- * @property SimpleORMapCollection topics has_many CourseTopic
- * @property SimpleORMapCollection dates has_many CourseDate
- * @property SimpleORMapCollection ex_dates has_many CourseExDate
- * @property SimpleORMapCollection members has_many CourseMember
- * @property SimpleORMapCollection deputies has_many Deputy
- * @property SimpleORMapCollection statusgruppen has_many Statusgruppen
- * @property SimpleORMapCollection admission_applicants has_many AdmissionApplication
- * @property SimpleORMapCollection datafields has_many DatafieldEntryModel
- * @property SimpleORMapCollection cycles has_many SeminarCycleDate
- * @property Semester[]|SimpleORMapCollection $semesters belongs_to Semester
- * @property Semester start_semester belongs_to Semester
- * @property Semester end_semester belongs_to Semester
- * @property Institute home_institut belongs_to Institute
- * @property AuxLockRule aux belongs_to AuxLockRule
- * @property SimpleORMapCollection study_areas has_and_belongs_to_many StudipStudyArea
- * @property SimpleORMapCollection institutes has_and_belongs_to_many Institute
- * @property Course parent belongs_to Course
- * @property SimpleORMapCollection children has_many Course
- * @property CourseConfig config additional field
- * @property ?\Courseware\StructuralElement $courseware has_one
+ * @property string $id alias column for seminar_id
+ * @property string $seminar_id database column
+ * @property string|null $veranstaltungsnummer database column
+ * @property string $institut_id database column
+ * @property I18NString $name database column
+ * @property I18NString|null $untertitel database column
+ * @property int $status database column
+ * @property I18NString $beschreibung database column
+ * @property I18NString|null $ort database column
+ * @property string|null $sonstiges database column
+ * @property int $lesezugriff database column
+ * @property int $schreibzugriff database column
+ * @property int|null $start_time database column
+ * @property int|null $duration_time database column
+ * @property I18NString|null $art database column
+ * @property I18NString|null $teilnehmer database column
+ * @property I18NString|null $vorrausetzungen database column
+ * @property I18NString|null $lernorga database column
+ * @property I18NString|null $leistungsnachweis database column
+ * @property int $mkdate database column
+ * @property int $chdate database column
+ * @property string|null $ects database column
+ * @property int|null $admission_turnout database column
+ * @property int|null $admission_binding database column
+ * @property int $admission_prelim database column
+ * @property string|null $admission_prelim_txt database column
+ * @property int $admission_disable_waitlist database column
+ * @property int $visible database column
+ * @property int|null $showscore database column
+ * @property string|null $aux_lock_rule database column
+ * @property int $aux_lock_rule_forced database column
+ * @property string|null $lock_rule database column
+ * @property int $admission_waitlist_max database column
+ * @property int $admission_disable_waitlist_move database column
+ * @property int $completion database column
+ * @property string|null $parent_course database column
+ * @property SimpleORMapCollection|CourseTopic[] $topics has_many CourseTopic
+ * @property SimpleORMapCollection|CourseDate[] $dates has_many CourseDate
+ * @property SimpleORMapCollection|CourseExDate[] $ex_dates has_many CourseExDate
+ * @property SimpleORMapCollection|CourseMember[] $members has_many CourseMember
+ * @property SimpleORMapCollection|Deputy[] $deputies has_many Deputy
+ * @property SimpleORMapCollection|Statusgruppen[] $statusgruppen has_many Statusgruppen
+ * @property SimpleORMapCollection|AdmissionApplication[] $admission_applicants has_many AdmissionApplication
+ * @property SimpleORMapCollection|DatafieldEntryModel[] $datafields has_many DatafieldEntryModel
+ * @property SimpleORMapCollection|SeminarCycleDate[] $cycles has_many SeminarCycleDate
+ * @property SimpleORMapCollection|BlubberThread[] $blubberthreads has_many BlubberThread
+ * @property SimpleORMapCollection|ConsultationBlock[] $consultation_blocks has_many ConsultationBlock
+ * @property SimpleORMapCollection|RoomRequest[] $room_requests has_many RoomRequest
+ * @property SimpleORMapCollection|Course[] $children has_many Course
+ * @property SimpleORMapCollection|ToolActivation[] $tools has_many ToolActivation
+ * @property SimpleORMapCollection|CourseMemberNotification[] $member_notifications has_many CourseMemberNotification
+ * @property SimpleORMapCollection|Courseware\Unit[] $courseware_units has_many Courseware\Unit
+ * @property Institute $home_institut belongs_to Institute
+ * @property AuxLockRule|null $aux belongs_to AuxLockRule
+ * @property Course|null $parent belongs_to Course
+ * @property SimpleORMapCollection|Semester[] $semesters has_and_belongs_to_many Semester
+ * @property SimpleORMapCollection|StudipStudyArea[] $study_areas has_and_belongs_to_many StudipStudyArea
+ * @property SimpleORMapCollection|Institute[] $institutes has_and_belongs_to_many Institute
+ * @property SimpleORMapCollection|UserDomain[] $domains has_and_belongs_to_many UserDomain
+ * @property-read mixed $teachers additional field
+ * @property mixed $end_time additional field
+ * @property mixed $start_semester additional field
+ * @property mixed $end_semester additional field
+ * @property-read mixed $semester_text additional field
+ * @property-read mixed $config additional field
  */
 
 class Course extends SimpleORMap implements Range, PrivacyObject, StudipItem, FeedbackRange
diff --git a/lib/models/CourseCancelledEvent.class.php b/lib/models/CourseCancelledEvent.class.php
index de2e4de245483f5004bb68c24015b109ac2be9f5..5fed9c53989651b85fa19fca9d27b94aab30adc3 100644
--- a/lib/models/CourseCancelledEvent.class.php
+++ b/lib/models/CourseCancelledEvent.class.php
@@ -10,6 +10,44 @@
  * @license     http://www.gnu.org/licenses/gpl-2.0.html GPL version 2
  * @category    Stud.IP
  *
+ * @property string $id alias for pk
+ * @property string $termin_id database column
+ * @property string $event_id alias column for termin_id
+ * @property string $range_id database column
+ * @property string $sem_id alias column for range_id
+ * @property string $autor_id database column
+ * @property string $author_id alias column for autor_id
+ * @property string $content database column
+ * @property string $ex_description alias column for content
+ * @property int $date database column
+ * @property int $start alias column for date
+ * @property int $end_time database column
+ * @property int $end alias column for end_time
+ * @property int $mkdate database column
+ * @property int $chdate database column
+ * @property int $date_typ database column
+ * @property int $category_intern alias column for date_typ
+ * @property string|null $raum database column
+ * @property string|null $metadate_id database column
+ * @property string $resource_id database column
+ * @property SimpleORMapCollection|Folder[] $folders has_many Folder
+ * @property SimpleORMapCollection|RoomRequest[] $room_requests has_many RoomRequest
+ * @property SimpleORMapCollection|ResourceRequestAppointment[] $resource_request_appointments has_many ResourceRequestAppointment
+ * @property User $author belongs_to User
+ * @property Course $course belongs_to Course
+ * @property SeminarCycleDate|null $cycle belongs_to SeminarCycleDate
+ * @property ResourceBooking $room_booking has_one ResourceBooking
+ * @property SimpleORMapCollection|CourseTopic[] $topics has_and_belongs_to_many CourseTopic
+ * @property SimpleORMapCollection|Statusgruppen[] $statusgruppen has_and_belongs_to_many Statusgruppen
+ * @property SimpleORMapCollection|User[] $dozenten has_and_belongs_to_many User
+ * @property-read mixed $location additional field
+ * @property mixed $type additional field
+ * @property-read mixed $name additional field
+ * @property-read mixed $title additional field
+ * @property-read mixed $editor_id additional field
+ * @property-read mixed $uid additional field
+ * @property-read mixed $summary additional field
+ * @property-read mixed $description additional field
  */
 
 class CourseCancelledEvent extends CourseEvent
diff --git a/lib/models/CourseDate.class.php b/lib/models/CourseDate.class.php
index 9ae0268e49083319b3f53e8873299fd1587adfb5..5ba3534df03a738b387c6b2136a5de846ef401d5 100644
--- a/lib/models/CourseDate.class.php
+++ b/lib/models/CourseDate.class.php
@@ -10,27 +10,28 @@
  * @license     http://www.gnu.org/licenses/gpl-2.0.html GPL version 2
  * @category    Stud.IP
  *
- * @property string termin_id database column
- * @property string id alias column for termin_id
- * @property string range_id database column
- * @property string autor_id database column
- * @property string content database column
- * @property string date database column
- * @property string end_time database column
- * @property string mkdate database column
- * @property string chdate database column
- * @property string date_typ database column
- * @property string topic_id database column
- * @property string raum database column
- * @property string metadate_id database column
- * @property User author belongs_to User
- * @property Course course belongs_to Course
- * @property SeminarCycleDate cycle belongs_to SeminarCycleDate
- * @property RoomRequest room_requests has_many RoomRequest
- * @property ResourceBooking room_booking has_one ResourceBooking
- * @property SimpleORMapCollection topics has_and_belongs_to_many CourseTopic
- * @property SimpleORMapCollection statusgruppen has_and_belongs_to_many Statusgruppen
- * @property SimpleORMapCollection dozenten has_and_belongs_to_many User
+ * @property string $id alias column for termin_id
+ * @property string $termin_id database column
+ * @property string $range_id database column
+ * @property string $autor_id database column
+ * @property string $content database column
+ * @property int $date database column
+ * @property int $end_time database column
+ * @property int $mkdate database column
+ * @property int $chdate database column
+ * @property int $date_typ database column
+ * @property string|null $raum database column
+ * @property string|null $metadate_id database column
+ * @property SimpleORMapCollection|Folder[] $folders has_many Folder
+ * @property SimpleORMapCollection|RoomRequest[] $room_requests has_many RoomRequest
+ * @property SimpleORMapCollection|ResourceRequestAppointment[] $resource_request_appointments has_many ResourceRequestAppointment
+ * @property User $author belongs_to User
+ * @property Course $course belongs_to Course
+ * @property SeminarCycleDate|null $cycle belongs_to SeminarCycleDate
+ * @property ResourceBooking $room_booking has_one ResourceBooking
+ * @property SimpleORMapCollection|CourseTopic[] $topics has_and_belongs_to_many CourseTopic
+ * @property SimpleORMapCollection|Statusgruppen[] $statusgruppen has_and_belongs_to_many Statusgruppen
+ * @property SimpleORMapCollection|User[] $dozenten has_and_belongs_to_many User
  */
 
 class CourseDate extends SimpleORMap implements PrivacyObject
diff --git a/lib/models/CourseEvent.class.php b/lib/models/CourseEvent.class.php
index 2d564b5dd4f2af438dac998c8544de92fee6c172..0dee26a8c590dc49589ae85794118ca80c13afef 100644
--- a/lib/models/CourseEvent.class.php
+++ b/lib/models/CourseEvent.class.php
@@ -10,6 +10,42 @@
  * @license     http://www.gnu.org/licenses/gpl-2.0.html GPL version 2
  * @category    Stud.IP
  *
+ * @property string $id alias for pk
+ * @property string $termin_id database column
+ * @property string $event_id alias column for termin_id
+ * @property string $range_id database column
+ * @property string $sem_id alias column for range_id
+ * @property string $autor_id database column
+ * @property string $author_id alias column for autor_id
+ * @property string $content database column
+ * @property int $date database column
+ * @property int $start alias column for date
+ * @property int $end_time database column
+ * @property int $end alias column for end_time
+ * @property int $mkdate database column
+ * @property int $chdate database column
+ * @property int $date_typ database column
+ * @property int $category_intern alias column for date_typ
+ * @property string|null $raum database column
+ * @property string|null $metadate_id database column
+ * @property SimpleORMapCollection|Folder[] $folders has_many Folder
+ * @property SimpleORMapCollection|RoomRequest[] $room_requests has_many RoomRequest
+ * @property SimpleORMapCollection|ResourceRequestAppointment[] $resource_request_appointments has_many ResourceRequestAppointment
+ * @property User $author belongs_to User
+ * @property Course $course belongs_to Course
+ * @property SeminarCycleDate|null $cycle belongs_to SeminarCycleDate
+ * @property ResourceBooking $room_booking has_one ResourceBooking
+ * @property SimpleORMapCollection|CourseTopic[] $topics has_and_belongs_to_many CourseTopic
+ * @property SimpleORMapCollection|Statusgruppen[] $statusgruppen has_and_belongs_to_many Statusgruppen
+ * @property SimpleORMapCollection|User[] $dozenten has_and_belongs_to_many User
+ * @property-read mixed $location additional field
+ * @property mixed $type additional field
+ * @property-read mixed $name additional field
+ * @property-read mixed $title additional field
+ * @property-read mixed $editor_id additional field
+ * @property-read mixed $uid additional field
+ * @property-read mixed $summary additional field
+ * @property-read mixed $description additional field
  */
 
 class CourseEvent extends CourseDate implements Event
diff --git a/lib/models/CourseExDate.class.php b/lib/models/CourseExDate.class.php
index f2c75b516108473b51abd99c284703191d63a706..993767a37b8eb77c78b207423f9424488e0d002f 100644
--- a/lib/models/CourseExDate.class.php
+++ b/lib/models/CourseExDate.class.php
@@ -10,26 +10,27 @@
  * @license     http://www.gnu.org/licenses/gpl-2.0.html GPL version 2
  * @category    Stud.IP
  *
- * @property string termin_id database column
- * @property string id alias column for termin_id
- * @property string range_id database column
- * @property string autor_id database column
- * @property string content database column
- * @property string date database column
- * @property string end_time database column
- * @property string mkdate database column
- * @property string chdate database column
- * @property string date_typ database column
- * @property string topic_id database column
- * @property string raum database column
- * @property string metadate_id database column
- * @property string resource_id database column
- * @property string topics computed column
- * @property string statusgruppen computed column
- * @property string dozenten computed column
- * @property User author belongs_to User
- * @property Course course belongs_to Course
- * @property SeminarCycleDate cycle belongs_to SeminarCycleDate
+ * @property string $id alias column for termin_id
+ * @property string $termin_id database column
+ * @property string $range_id database column
+ * @property string $autor_id database column
+ * @property string $content database column
+ * @property int $date database column
+ * @property int $end_time database column
+ * @property int $mkdate database column
+ * @property int $chdate database column
+ * @property int $date_typ database column
+ * @property string|null $raum database column
+ * @property string|null $metadate_id database column
+ * @property string $resource_id database column
+ * @property User $author belongs_to User
+ * @property Course $course belongs_to Course
+ * @property SeminarCycleDate|null $cycle belongs_to SeminarCycleDate
+ * @property-read mixed $topics additional field
+ * @property-read mixed $statusgruppen additional field
+ * @property-read mixed $dozenten additional field
+ * @property-read mixed $room_booking additional field
+ * @property-read mixed $room_request additional field
  */
 
 class CourseExDate extends SimpleORMap implements PrivacyObject
diff --git a/lib/models/CourseMarkedEvent.class.php b/lib/models/CourseMarkedEvent.class.php
index 76cc050702ceb469263f367e096f037cfe7e3e12..96f030043d51b7be751b2abda4e0f218493173be 100644
--- a/lib/models/CourseMarkedEvent.class.php
+++ b/lib/models/CourseMarkedEvent.class.php
@@ -10,6 +10,42 @@
  * @license     http://www.gnu.org/licenses/gpl-2.0.html GPL version 2
  * @category    Stud.IP
  *
+ * @property string $id alias for pk
+ * @property string $termin_id database column
+ * @property string $event_id alias column for termin_id
+ * @property string $range_id database column
+ * @property string $sem_id alias column for range_id
+ * @property string $autor_id database column
+ * @property string $author_id alias column for autor_id
+ * @property string $content database column
+ * @property int $date database column
+ * @property int $start alias column for date
+ * @property int $end_time database column
+ * @property int $end alias column for end_time
+ * @property int $mkdate database column
+ * @property int $chdate database column
+ * @property int $date_typ database column
+ * @property int $category_intern alias column for date_typ
+ * @property string|null $raum database column
+ * @property string|null $metadate_id database column
+ * @property SimpleORMapCollection|Folder[] $folders has_many Folder
+ * @property SimpleORMapCollection|RoomRequest[] $room_requests has_many RoomRequest
+ * @property SimpleORMapCollection|ResourceRequestAppointment[] $resource_request_appointments has_many ResourceRequestAppointment
+ * @property User $author belongs_to User
+ * @property Course $course belongs_to Course
+ * @property SeminarCycleDate|null $cycle belongs_to SeminarCycleDate
+ * @property ResourceBooking $room_booking has_one ResourceBooking
+ * @property SimpleORMapCollection|CourseTopic[] $topics has_and_belongs_to_many CourseTopic
+ * @property SimpleORMapCollection|Statusgruppen[] $statusgruppen has_and_belongs_to_many Statusgruppen
+ * @property SimpleORMapCollection|User[] $dozenten has_and_belongs_to_many User
+ * @property-read mixed $location additional field
+ * @property mixed $type additional field
+ * @property-read mixed $name additional field
+ * @property-read mixed $title additional field
+ * @property-read mixed $editor_id additional field
+ * @property-read mixed $uid additional field
+ * @property-read mixed $summary additional field
+ * @property-read mixed $description additional field
  */
 
 class CourseMarkedEvent extends CourseEvent
diff --git a/lib/models/CourseMember.class.php b/lib/models/CourseMember.class.php
index 0988c5ae93f1660bf5efdf0ac39c8ecbd7774dcc..cb32abc093dbfb71ce6356442dac598b793420cf 100644
--- a/lib/models/CourseMember.class.php
+++ b/lib/models/CourseMember.class.php
@@ -13,28 +13,27 @@
  * @license     http://www.gnu.org/licenses/gpl-2.0.html GPL version 2
  * @category    Stud.IP
  *
- * @property string seminar_id database column
- * @property string user_id database column
- * @property string status database column
- * @property string position database column
- * @property string gruppe database column
- * @property string notification database column
- * @property string mkdate database column
- * @property string comment database column
- * @property string visible database column
- * @property string label database column
- * @property string bind_calendar database column
- * @property string vorname computed column read/write
- * @property string nachname computed column read/write
- * @property string username computed column read/write
- * @property string email computed column read/write
- * @property string title_front computed column read/write
- * @property string title_rear computed column read/write
- * @property string course_name computed column read/write
- * @property string id computed column read/write
- * @property SimpleORMapCollection datafields has_many DatafieldEntryModel
- * @property User user belongs_to User
- * @property Course course belongs_to Course
+ * @property array $id alias for pk
+ * @property string $seminar_id database column
+ * @property string $user_id database column
+ * @property string $status database column
+ * @property int $position database column
+ * @property int $gruppe database column
+ * @property int $mkdate database column
+ * @property string $comment database column
+ * @property string $visible database column
+ * @property string $label database column
+ * @property int $bind_calendar database column
+ * @property SimpleORMapCollection|DatafieldEntryModel[] $datafields has_many DatafieldEntryModel
+ * @property User $user belongs_to User
+ * @property Course $course belongs_to Course
+ * @property mixed $vorname additional field
+ * @property mixed $nachname additional field
+ * @property mixed $username additional field
+ * @property mixed $email additional field
+ * @property mixed $title_front additional field
+ * @property mixed $title_rear additional field
+ * @property mixed $course_name additional field
  */
 class CourseMember extends SimpleORMap implements PrivacyObject
 {
diff --git a/lib/models/CourseMemberNotification.php b/lib/models/CourseMemberNotification.php
index 3a1f072f13f83d7962b69b42a6d6b6b76418bc51..e72ba762be20770c83a6064efed1f2da8b6d6b94 100644
--- a/lib/models/CourseMemberNotification.php
+++ b/lib/models/CourseMemberNotification.php
@@ -13,15 +13,14 @@
  * @license     http://www.gnu.org/licenses/gpl-2.0.html GPL version 2
  * @category    Stud.IP
  *
- * @property string seminar_id database column
- * @property string user_id database column
- * @property string notifications database column
- * @property string mkdate database column
- * @property string chdate database column
- * @property User user belongs_to User
- * @property Course course belongs_to Course
- *
- * @property JSONArrayObject notification_data
+ * @property array $id alias for pk
+ * @property string $user_id database column
+ * @property string $seminar_id database column
+ * @property JSONArrayObject|null $notification_data database column
+ * @property int $chdate database column
+ * @property int $mkdate database column
+ * @property User $user belongs_to User
+ * @property Course $course belongs_to Course
  */
 class CourseMemberNotification extends SimpleORMap implements PrivacyObject
 {
@@ -36,7 +35,7 @@ class CourseMemberNotification extends SimpleORMap implements PrivacyObject
             'class_name'  => Course::class,
             'foreign_key' => 'seminar_id',
         ];
-        $config['serialized_fields']['notification_data'] = 'JSONArrayObject';
+        $config['serialized_fields']['notification_data'] = JSONArrayObject::class;
 
         parent::configure($config);
     }
diff --git a/lib/models/CourseTopic.class.php b/lib/models/CourseTopic.class.php
index 61468d700db2178e494706a66d8c251e0027d342..eb26efa5adff41b23a42e40a2a5a7bd81ed96d4c 100644
--- a/lib/models/CourseTopic.class.php
+++ b/lib/models/CourseTopic.class.php
@@ -10,19 +10,21 @@
  * @license     http://www.gnu.org/licenses/gpl-2.0.html GPL version 2
  * @category    Stud.IP
  *
- * @property string issue_id database column
- * @property string id alias column for issue_id
- * @property string seminar_id database column
- * @property string author_id database column
- * @property string title database column
- * @property string description database column
- * @property string priority database column
- * @property string mkdate database column
- * @property string chdate database column
- * @property Folder folder belongs_to DocumentFolder
- * @property Course course belongs_to Course
- * @property User author belongs_to User
- * @property SimpleORMapCollection dates has_and_belongs_to_many CourseDate
+ * @property string $id alias column for issue_id
+ * @property string $issue_id database column
+ * @property string $seminar_id database column
+ * @property string $author_id database column
+ * @property I18NString $title database column
+ * @property I18NString $description database column
+ * @property int $priority database column
+ * @property int $paper_related database column
+ * @property int $mkdate database column
+ * @property int $chdate database column
+ * @property SimpleORMapCollection|Folder[] $folders has_many Folder
+ * @property Course $course belongs_to Course
+ * @property User $author belongs_to User
+ * @property SimpleORMapCollection|CourseDate[] $dates has_and_belongs_to_many CourseDate
+ * @property-read mixed $forum_thread_url additional field
  */
 class CourseTopic extends SimpleORMap
 {
diff --git a/lib/models/CourseWizardStepRegistry.php b/lib/models/CourseWizardStepRegistry.php
index 4f9eb6fc502cb70d29a6bda2432ed809a436ca56..7c473c4e9ca002c1eb52192b6a3c03c38742717e 100644
--- a/lib/models/CourseWizardStepRegistry.php
+++ b/lib/models/CourseWizardStepRegistry.php
@@ -12,6 +12,14 @@
  * @copyright   2015 Stud.IP Core-Group
  * @license     http://www.gnu.org/licenses/gpl-2.0.html GPL version 2
  * @category    Stud.IP
+ *
+ * @property string $id database column
+ * @property string $name database column
+ * @property string $classname database column
+ * @property int $number database column
+ * @property int $enabled database column
+ * @property int $mkdate database column
+ * @property int $chdate database column
  */
 
 class CourseWizardStepRegistry extends SimpleORMap
@@ -48,4 +56,4 @@ class CourseWizardStepRegistry extends SimpleORMap
         return sizeof(self::findBySQL("`enabled`=1")) > 0 ? true : false;
     }
 
-}
\ No newline at end of file
+}
diff --git a/lib/models/Courseware/Block.php b/lib/models/Courseware/Block.php
index f5d8b202acbc9dd0c2abd6bc3ccbd5b5dc39cbf3..b794832343819d04d2ce3bf007884ae87d6d39af 100644
--- a/lib/models/Courseware/Block.php
+++ b/lib/models/Courseware/Block.php
@@ -14,27 +14,27 @@ use User;
  *
  * @since   Stud.IP 5.0
  *
- * @property int                              $id              database column
- * @property int                              $container_id    database column
- * @property string                           $owner_id        database column
- * @property string                           $editor_id       database column
- * @property string                           $edit_blocker_id database column
- * @property int                              $position        database column
- * @property string                           $block_type      database column
- * @property int                              $visible         database column
- * @property string                           $payload         database column
- * @property int                              $mkdate          database column
- * @property int                              $chdate          database column
- * @property \Courseware\BlockTypes\BlockType $type            computed column read/write
- * @property string                           $files           computed column
- * @property \SimpleORMapCollection           $data_fields     has_many Courseware\UserDataField
- * @property \SimpleORMapCollection           $comments        has_many Courseware\BlockComment
- * @property \SimpleORMapCollection           $block_feedback  has_many Courseware\BlockFeedback
- * @property \SimpleORMapCollection           $progresses      has_many Courseware\UserProgress
- * @property \User                            $owner           belongs_to User
- * @property \User                            $editor          belongs_to User
- * @property \User                            $edit_blocker    belongs_to User
- * @property \Courseware\Container            $container       belongs_to Courseware\Container
+ * @property int $id database column
+ * @property int $container_id database column
+ * @property string $owner_id database column
+ * @property string $editor_id database column
+ * @property string|null $edit_blocker_id database column
+ * @property int $position database column
+ * @property string|null $block_type database column
+ * @property int $visible database column
+ * @property string $payload database column
+ * @property int $mkdate database column
+ * @property int $chdate database column
+ * @property \SimpleORMapCollection|UserDataField[] $data_fields has_many UserDataField
+ * @property \SimpleORMapCollection|BlockComment[] $comments has_many BlockComment
+ * @property \SimpleORMapCollection|BlockFeedback[] $block_feedback has_many BlockFeedback
+ * @property \SimpleORMapCollection|UserProgress[] $progresses has_many UserProgress
+ * @property \User $owner belongs_to \User
+ * @property \User $editor belongs_to \User
+ * @property \User|null $edit_blocker belongs_to \User
+ * @property Container $container belongs_to Container
+ * @property mixed $type additional field
+ * @property-read mixed $files additional field
  */
 class Block extends \SimpleORMap implements \PrivacyObject
 {
diff --git a/lib/models/Courseware/BlockComment.php b/lib/models/Courseware/BlockComment.php
index fc6811120b1c25ae68fd3555636d665993825b01..6191e1afd8b3ce9d56987ffed91bd407efcd1f6b 100644
--- a/lib/models/Courseware/BlockComment.php
+++ b/lib/models/Courseware/BlockComment.php
@@ -14,14 +14,14 @@ use User;
  *
  * @since   Stud.IP 5.0
  *
- * @property int               $id       database column
- * @property int               $block_id database column
- * @property string            $user_id  database column
- * @property string            $comment  database column
- * @property int               $mkdate   database column
- * @property int               $chdate   database column
- * @property \User             $user     belongs_to User
- * @property \Courseware\Block $block    belongs_to Courseware\Block
+ * @property int $id database column
+ * @property int $block_id database column
+ * @property string $user_id database column
+ * @property string $comment database column
+ * @property int $mkdate database column
+ * @property int $chdate database column
+ * @property \User $user belongs_to \User
+ * @property Block $block belongs_to Block
  */
 class BlockComment extends \SimpleORMap implements \PrivacyObject
 {
diff --git a/lib/models/Courseware/BlockFeedback.php b/lib/models/Courseware/BlockFeedback.php
index 21eed5d0a3714d0356e45cfe6d3ac6dcd030930f..1be3b3c3d818c35f2ac0404f36cedfda2b0f8e7d 100644
--- a/lib/models/Courseware/BlockFeedback.php
+++ b/lib/models/Courseware/BlockFeedback.php
@@ -12,14 +12,14 @@ use User;
  *
  * @since   Stud.IP 5.0
  *
- * @property int               $id        database column
- * @property int               $block_id  database column
- * @property string            $user_id database column
- * @property string            $feedback  database column
- * @property int               $mkdate    database column
- * @property int               $chdate    database column
- * @property \User             $user      belongs_to User
- * @property \Courseware\Block $block     belongs_to Courseware\Block
+ * @property int $id database column
+ * @property int $block_id database column
+ * @property string $user_id database column
+ * @property string $feedback database column
+ * @property int $mkdate database column
+ * @property int $chdate database column
+ * @property \User $user belongs_to \User
+ * @property Block $block belongs_to Block
  */
 class BlockFeedback extends \SimpleORMap implements \PrivacyObject
 {
diff --git a/lib/models/Courseware/Bookmark.php b/lib/models/Courseware/Bookmark.php
index ddff953a289bcda05db2c4a159e927a3888760ac..0cd4c59ac6b898c500bbd84896b2f8e1facb0d9f 100644
--- a/lib/models/Courseware/Bookmark.php
+++ b/lib/models/Courseware/Bookmark.php
@@ -12,13 +12,13 @@ namespace Courseware;
  *
  * @since   Stud.IP 5.0
  *
- * @property array                         $id         computed column read/write
- * @property string                        $user_id    database column
- * @property int                           $element_id database column
- * @property int                           $mkdate     database column
- * @property int                           $chdate     database column
- * @property \User                         $user       belongs_to User
- * @property \Courseware\StructuralElement $element    belongs_to Courseware\StructuralElement
+ * @property array $id alias for pk
+ * @property string $user_id database column
+ * @property int $element_id database column
+ * @property int $mkdate database column
+ * @property int $chdate database column
+ * @property \User $user belongs_to \User
+ * @property StructuralElement $element belongs_to StructuralElement
  */
 class Bookmark extends \SimpleORMap implements \PrivacyObject
 {
diff --git a/lib/models/Courseware/Certificate.php b/lib/models/Courseware/Certificate.php
index d0c9fd9a5e11bccc1857047ffe8eb915de04c4f7..579c729d4be620362009a95556dc7a8df1f72d27 100644
--- a/lib/models/Courseware/Certificate.php
+++ b/lib/models/Courseware/Certificate.php
@@ -12,10 +12,13 @@ use \User, \Course;
  *
  * @since   Stud.IP 5.3
  *
- * @property string     $id             database column
- * @property string     $user_id        database column
- * @property string     $course_id      database column
- * @property int        $mkdate         database column
+ * @property string $id database column
+ * @property string $user_id database column
+ * @property string $course_id database column
+ * @property int $unit_id database column
+ * @property int $mkdate database column
+ * @property \User $user belongs_to \User
+ * @property \Course $course belongs_to \Course
  */
 class Certificate extends \SimpleORMap
 {
diff --git a/lib/models/Courseware/Container.php b/lib/models/Courseware/Container.php
index ac5ef60bbccd2c16f6c01997489e317c494ede08..a4f773fa9cc43e2c87561260dcbf74f13646d753 100644
--- a/lib/models/Courseware/Container.php
+++ b/lib/models/Courseware/Container.php
@@ -2,6 +2,7 @@
 
 namespace Courseware;
 
+use JSONArrayObject;
 use User;
 
 /**
@@ -14,24 +15,24 @@ use User;
  *
  * @since   Stud.IP 5.0
  *
- * @property int                                      $id                    database column
- * @property int                                      $structural_element_id database column
- * @property string                                   $owner_id              database column
- * @property string                                   $editor_id             database column
- * @property string                                   $edit_blocker_id       database column
- * @property int                                      $position              database column
- * @property int                                      $site                  database column
- * @property string                                   $container_type        database column
- * @property int                                      $visible               database column
- * @property string                                   $payload               database column
- * @property int                                      $mkdate                database column
- * @property int                                      $chdate                database column
- * @property \Courseware\ContainerTypes\ContainerType $type                  computed column read/write
- * @property \SimpleORMapCollection                   $blocks                has_many Courseware\Block
- * @property \User                                    $owner                 belongs_to User
- * @property \User                                    $editor                belongs_to User
- * @property \User                                    $edit_blocker          belongs_to User
- * @property \Courseware\StructuralElement            $structural_element    belongs_to Courseware\StructuralElement
+ * @property int $id database column
+ * @property int $structural_element_id database column
+ * @property string $owner_id database column
+ * @property string $editor_id database column
+ * @property string|null $edit_blocker_id database column
+ * @property int $position database column
+ * @property int $site database column
+ * @property string $container_type database column
+ * @property int $visible database column
+ * @property \JSONArrayObject $payload database column
+ * @property int $mkdate database column
+ * @property int $chdate database column
+ * @property \SimpleORMapCollection|Block[] $blocks has_many Block
+ * @property \User $owner belongs_to \User
+ * @property \User $editor belongs_to \User
+ * @property \User|null $edit_blocker belongs_to \User
+ * @property StructuralElement $structural_element belongs_to StructuralElement
+ * @property mixed $type additional field
  */
 class Container extends \SimpleORMap implements \PrivacyObject
 {
@@ -39,7 +40,7 @@ class Container extends \SimpleORMap implements \PrivacyObject
     {
         $config['db_table'] = 'cw_containers';
 
-        $config['serialized_fields']['payload'] = 'JSONArrayObject';
+        $config['serialized_fields']['payload'] = JSONArrayObject::class;
 
         $config['has_many']['blocks'] = [
             'class_name' => Block::class,
@@ -145,7 +146,7 @@ class Container extends \SimpleORMap implements \PrivacyObject
             'payload' => $this['payload'],
         ]);
 
-        list($blockMapIds, $blockMapObjs) = $this->copyBlocks($user, $container);
+        [$blockMapIds, $blockMapObjs] = $this->copyBlocks($user, $container);
 
         $container['payload'] = $container->type->copyPayload($blockMapIds);
 
diff --git a/lib/models/Courseware/PublicLink.php b/lib/models/Courseware/PublicLink.php
index d02e077b1a0a800ec538fd5b636ba953a7e84ce4..16e61dc94e4d9f6c7a6374916c9abdcc378dfd7e 100644
--- a/lib/models/Courseware/PublicLink.php
+++ b/lib/models/Courseware/PublicLink.php
@@ -10,12 +10,15 @@ namespace Courseware;
 *
 * @since   Stud.IP 5.2
 *
-* @property string                         $id                     database column
-* @property int                            $structural_element_id  database column
-* @property string                         $password               database column
-* @property int                            $expire_date            database column
-* @property int                            $mkdate                 database column
-* @property int                            $chdate                 database column
+ *
+ * @property string $id database column
+ * @property string $user_id database column
+ * @property int $structural_element_id database column
+ * @property string $password database column
+ * @property int $expire_date database column
+ * @property int $mkdate database column
+ * @property int $chdate database column
+ * @property StructuralElement $structural_element belongs_to StructuralElement
 */
 class PublicLink extends \SimpleORMap
 {
diff --git a/lib/models/Courseware/StructuralElement.php b/lib/models/Courseware/StructuralElement.php
index 8c6d1ded6151cf54d56b1cd3f08b8a31fdaabe0b..940547ec65cde61e5cbfbafa625af8185ad80b22 100644
--- a/lib/models/Courseware/StructuralElement.php
+++ b/lib/models/Courseware/StructuralElement.php
@@ -2,6 +2,7 @@
 
 namespace Courseware;
 
+use JSONArrayObject;
 use User;
 
 /**
@@ -14,45 +15,42 @@ use User;
  *
  * @since   Stud.IP 5.0
  *
- * @property int                            $id                 database column
- * @property int                            $parent_id          database column
- * @property int                            $is_link            database column
- * @property int                            $target_id          database column
- * @property string                         $range_id           database column
- * @property string                         $range_type         database column
- * @property string                         $owner_id           database column
- * @property string                         $editor_id          database column
- * @property string                         $edit_blocker_id    database column
- * @property int                            $position           database column
- * @property string                         $title              database column
- * @property string                         $image_id           database column
- * @property string                         $image_type         database column
- * @property string                         $purpose            database column
- * @property \JSONArrayObject               $payload            database column
- * @property int                            $public             database column
- * @property string                         $release_date       database column
- * @property string                         $withdraw_date      database column
- * @property \JSONArrayObject               $read_approval      database column
- * @property \JSONArrayObject               $write_approval     database column
- * @property \JSONArrayObject               $copy_approval      database column
- * @property \JSONArrayObject               $external_relations database column
- * @property int                            $mkdate             database column
- * @property int                            $chdate             database column
- * @property \SimpleORMapCollection         $children           has_many Courseware\StructuralElement
- * @property \SimpleORMapCollection         $containers         has_many Courseware\Container
- * @property ?\Courseware\StructuralElement $parent             belongs_to Courseware\StructuralElement
- * @property \User                          $user               belongs_to User
- * @property \Course                        $course             belongs_to Course
- * @property \User                          $owner              belongs_to User
- * @property \User                          $editor             belongs_to User
- * @property ?\User                         $edit_blocker       belongs_to User
- * @property \FileRef|\StockImage|null      $image              has_one FileRef or StockImage
- * @property ?\Courseware\Task              $task               has_one Courseware\Task
- * @property \SimpleORMapCollection         $comments           has_many Courseware\StructuralElementComment
- * @property \SimpleORMapCollection         $feedback           has_many Courseware\StructuralElementFeedback
- *
- * @SuppressWarnings(PHPMD.TooManyPublicMethods)
- * @SuppressWarnings(PHPMD.ExcessiveClassComplexity)
+ * @property int $id database column
+ * @property int|null $parent_id database column
+ * @property int $is_link database column
+ * @property int|null $target_id database column
+ * @property string $range_id database column
+ * @property string|null $range_type database column
+ * @property string $owner_id database column
+ * @property string $editor_id database column
+ * @property string|null $edit_blocker_id database column
+ * @property int $position database column
+ * @property string $title database column
+ * @property string|null $image_id database column
+ * @property string $image_type database column
+ * @property string|null $purpose database column
+ * @property \JSONArrayObject $payload database column
+ * @property int $public database column
+ * @property int $release_date database column
+ * @property int $withdraw_date database column
+ * @property \JSONArrayObject $read_approval database column
+ * @property \JSONArrayObject $write_approval database column
+ * @property \JSONArrayObject $copy_approval database column
+ * @property \JSONArrayObject $external_relations database column
+ * @property int $mkdate database column
+ * @property int $chdate database column
+ * @property \SimpleORMapCollection|StructuralElement[] $children has_many StructuralElement
+ * @property \SimpleORMapCollection|Container[] $containers has_many Container
+ * @property \SimpleORMapCollection|StructuralElementComment[] $comments has_many StructuralElementComment
+ * @property \SimpleORMapCollection|StructuralElementFeedback[] $feedback has_many StructuralElementFeedback
+ * @property StructuralElement|null $parent belongs_to StructuralElement
+ * @property \User $user belongs_to \User
+ * @property \Course $course belongs_to \Course
+ * @property \User $owner belongs_to \User
+ * @property \User $editor belongs_to \User
+ * @property \User|null $edit_blocker belongs_to \User
+ * @property Task $task has_one Task
+ * @property mixed $image additional field
  */
 class StructuralElement extends \SimpleORMap implements \PrivacyObject
 {
@@ -60,11 +58,11 @@ class StructuralElement extends \SimpleORMap implements \PrivacyObject
     {
         $config['db_table'] = 'cw_structural_elements';
 
-        $config['serialized_fields']['payload'] = 'JSONArrayObject';
-        $config['serialized_fields']['read_approval'] = 'JSONArrayObject';
-        $config['serialized_fields']['write_approval'] = 'JSONArrayObject';
-        $config['serialized_fields']['copy_approval'] = 'JSONArrayObject';
-        $config['serialized_fields']['external_relations'] = 'JSONArrayObject';
+        $config['serialized_fields']['payload'] = JSONArrayObject::class;
+        $config['serialized_fields']['read_approval'] = JSONArrayObject::class;
+        $config['serialized_fields']['write_approval'] = JSONArrayObject::class;
+        $config['serialized_fields']['copy_approval'] = JSONArrayObject::class;
+        $config['serialized_fields']['external_relations'] = JSONArrayObject::class;
 
         $config['has_many']['children'] = [
             'class_name' => StructuralElement::class,
@@ -898,7 +896,7 @@ SQL;
 
         $element->store();
 
-        list($containerMap, $blockMap) = $this->copyContainers($user, $element);
+        [$containerMap, $blockMap] = $this->copyContainers($user, $element);
 
         $mappingId = $recursiveId === '' ? $this->id . '_' . $element->id : $recursiveId;
         if (!isset($mapping[$mappingId])) {
@@ -1003,7 +1001,7 @@ SQL;
         $containerMap = [];
         $blockMap = [];
         foreach ($this->containers as $container) {
-            list($newContainer, $blockMapsObjs) = $container->copy($user, $newElement);
+            [$newContainer, $blockMapsObjs] = $container->copy($user, $newElement);
             $containerMap[$container->id] = $newContainer->id;
             $blockMap = $blockMap + $blockMapsObjs;
         }
diff --git a/lib/models/Courseware/StructuralElementComment.php b/lib/models/Courseware/StructuralElementComment.php
index 1e046c4d4e798ae6fe104b88251764ce8a51399a..5ce4003f1fd66befd1944035e9cd7c765b49a8c8 100644
--- a/lib/models/Courseware/StructuralElementComment.php
+++ b/lib/models/Courseware/StructuralElementComment.php
@@ -12,14 +12,14 @@ use User;
  *
  * @since   Stud.IP 5.1
  *
- * @property int                            $id                      database column
- * @property int                            $structural_element_id   database column
- * @property string                         $user_id                 database column
- * @property string                         $comment                 database column
- * @property int                            $mkdate                  database column
- * @property int                            $chdate                  database column
- * @property \User                          $user                    belongs_to User
- * @property \Courseware\StructuralElement  $structural_element      belongs_to Courseware\StructuralElement
+ * @property int $id database column
+ * @property int $structural_element_id database column
+ * @property string $user_id database column
+ * @property string $comment database column
+ * @property int $mkdate database column
+ * @property int $chdate database column
+ * @property \User $user belongs_to \User
+ * @property StructuralElement $structural_element belongs_to StructuralElement
  */
 class StructuralElementComment extends \SimpleORMap implements \PrivacyObject
 {
diff --git a/lib/models/Courseware/StructuralElementFeedback.php b/lib/models/Courseware/StructuralElementFeedback.php
index c7435d06b67c219a38efd2ea499ba8e906bd5b89..f13d47314956ba9424fc47212467a2b20c52182e 100644
--- a/lib/models/Courseware/StructuralElementFeedback.php
+++ b/lib/models/Courseware/StructuralElementFeedback.php
@@ -12,14 +12,14 @@ use User;
  *
  * @since   Stud.IP 5.1
  *
- * @property int                            $id                      database column
- * @property int                            $structural_element_id   database column
- * @property string                         $user_id                 database column
- * @property string                         $feedback                 database column
- * @property int                            $mkdate                  database column
- * @property int                            $chdate                  database column
- * @property \User                          $user                    belongs_to User
- * @property \Courseware\StructuralElement  $structural_element      belongs_to Courseware\StructuralElement
+ * @property int $id database column
+ * @property int $structural_element_id database column
+ * @property string $user_id database column
+ * @property string $feedback database column
+ * @property int $mkdate database column
+ * @property int $chdate database column
+ * @property \User $user belongs_to \User
+ * @property StructuralElement $structural_element belongs_to StructuralElement
  */
 class StructuralElementFeedback extends \SimpleORMap implements \PrivacyObject
 {
diff --git a/lib/models/Courseware/Task.php b/lib/models/Courseware/Task.php
index d8ecb80bf20d85cc17c958cc2ad3c27070f26cb0..3a68d3e4ffef6c0062ef873221d2161e2a4ea2b2 100644
--- a/lib/models/Courseware/Task.php
+++ b/lib/models/Courseware/Task.php
@@ -16,20 +16,22 @@ use User;
  * @property int $task_group_id database column
  * @property int $structural_element_id database column
  * @property string $solver_id database column
- * @property string $solver_type database column
+ * @property string|null $solver_type database column
  * @property int $submission_date database column
  * @property int $submitted database column
- * @property string $renewal database column
+ * @property string|null $renewal database column
  * @property int $renewal_date database column
- * @property int $feedback_id database column
+ * @property int|null $feedback_id database column
  * @property int $mkdate database column
  * @property int $chdate database column
- * @property \Courseware\TaskGroup $task_group belongs_to Courseware\TaskGroup
- * @property \Courseware\StructuralElement $structural_element belongs_to Courseware\TaskGroup
- * @property \User $user belongs_to User
- * @property \Statusgruppen $group belongs_to Statusgruppen
- * @property \Courseware\TaskFeedback $task_feedback belongs_to Courseware\TaskFeedback
- * @property-read \User|\Statusgruppen|null $solver belongs_to User or Statusgruppen
+ * @property TaskGroup $task_group belongs_to TaskGroup
+ * @property StructuralElement $structural_element belongs_to StructuralElement
+ * @property \User $lecturer belongs_to \User
+ * @property \User $user belongs_to \User
+ * @property \Statusgruppen $group belongs_to \Statusgruppen
+ * @property \Course $course belongs_to \Course
+ * @property TaskFeedback|null $task_feedback belongs_to TaskFeedback
+ * @property mixed $solver additional field
  */
 class Task extends \SimpleORMap
 {
diff --git a/lib/models/Courseware/TaskFeedback.php b/lib/models/Courseware/TaskFeedback.php
index 987aae9f5c0c4629f86e32a15d81157b026e3391..2c549ad570943170893d48588e5f75d70df5de55 100644
--- a/lib/models/Courseware/TaskFeedback.php
+++ b/lib/models/Courseware/TaskFeedback.php
@@ -12,15 +12,15 @@ use User;
 *
 * @since   Stud.IP 5.1
 *
-* @property int                            $id                     database column
-* @property int                            $task_id                database column
-* @property string                         $lecturer_id            database column
-* @property string                         $content                database column
-* @property int                            $mkdate                 database column
-* @property int                            $chdate                 database column
-
-* @property \User                          $lecturer               belongs_to User
-* @property \Courseware\Task               $task                   belongs_to Courseware\Task
+ *
+ * @property int $id database column
+ * @property int $task_id database column
+ * @property string $lecturer_id database column
+ * @property string $content database column
+ * @property int $mkdate database column
+ * @property int $chdate database column
+ * @property \User $lecturer belongs_to \User
+ * @property Task $task belongs_to Task
 */
 class TaskFeedback extends \SimpleORMap implements \PrivacyObject
 {
diff --git a/lib/models/Courseware/TaskGroup.php b/lib/models/Courseware/TaskGroup.php
index d32866390a935b0569d808bf338e3c5fbd5f4415..092edf644a44583d8a84798a92b7211ff0322429 100644
--- a/lib/models/Courseware/TaskGroup.php
+++ b/lib/models/Courseware/TaskGroup.php
@@ -12,18 +12,18 @@ use User;
  *
  * @since   Stud.IP 5.1
  *
- * @property int                           $id                    database column
- * @property string                        $seminar_id            database column
- * @property string                        $lecturer_id           database column
- * @property int                           $structural_element_id database column
- * @property int                           $solver_may_add_blocks database column
- * @property string                        $title                 database column
- * @property int                           $mkdate                database column
- * @property int                           $chdate                database column
- * @property \User                         $lecturer              belongs_to User
- * @property \Course                       $course                belongs_to Course
- * @property \Courseware\StructuralElement $structural_element    belongs_to Courseware\StructuralElement
- * @property \SimpleORMapCollection        $tasks                 has_many Courseware\Task
+ * @property int $id database column
+ * @property string $seminar_id database column
+ * @property string $lecturer_id database column
+ * @property int $target_id database column
+ * @property int $task_template_id database column
+ * @property int $solver_may_add_blocks database column
+ * @property string $title database column
+ * @property int $mkdate database column
+ * @property int $chdate database column
+ * @property \SimpleORMapCollection|Task[] $tasks has_many Task
+ * @property \User $lecturer belongs_to \User
+ * @property \Course $course belongs_to \Course
  */
 class TaskGroup extends \SimpleORMap implements \PrivacyObject
 {
diff --git a/lib/models/Courseware/Template.php b/lib/models/Courseware/Template.php
index 8161d989ee9a5c4fc90545a9de38f07af18a1c85..11a6c5f7fd527cd67fa4f0c53f9dd36317ab4f94 100644
--- a/lib/models/Courseware/Template.php
+++ b/lib/models/Courseware/Template.php
@@ -10,12 +10,13 @@ namespace Courseware;
 *
 * @since   Stud.IP 5.1
 *
-* @property int                            $id                     database column
-* @property string                         $name                   database column
-* @property string                         $purpose                database column
-* @property string                         $structure              database column
-* @property int                            $mkdate                 database column
-* @property int                            $chdate                 database column
+ *
+ * @property int $id database column
+ * @property string $name database column
+ * @property string|null $purpose database column
+ * @property string $structure database column
+ * @property int $mkdate database column
+ * @property int $chdate database column
 */
 class Template extends \SimpleORMap
 {
@@ -25,4 +26,4 @@ class Template extends \SimpleORMap
 
         parent::configure($config);
     }
-}
\ No newline at end of file
+}
diff --git a/lib/models/Courseware/Unit.php b/lib/models/Courseware/Unit.php
index 647f9f9fb700632c9c98b1b87bd480f6ea53b595..e89b04dbd627b9d3ba64263a11dd44eaee72e985 100644
--- a/lib/models/Courseware/Unit.php
+++ b/lib/models/Courseware/Unit.php
@@ -2,6 +2,7 @@
 
 namespace Courseware;
 
+use JSONArrayObject;
 use User;
 
 /**
@@ -12,23 +13,22 @@ use User;
  *
  * @since   Stud.IP 5.3
  *
- * @property int                            $id                     database column
- * @property string                         $range_id               database column
- * @property string                         $range_type             database column
- * @property int                            $structural_element_id  database column
- * @property string                         $content_type           database column
- * @property int                            $public                 database column
- * @property string                         $creator_id             database column
- * @property int                            $release_date           database column
- * @property int                            $withdraw_date          database column
- * @property \JSONArrayObject               $config                 database column
- * @property int                            $mkdate                 database column
- * @property int                            $chdate                 database column
- * @property \User                          $creator                belongs_to User
- * @property \Courseware\StructuralElement  $structural_element     belongs_to Courseware\StructuralElement
- *
- * @SuppressWarnings(PHPMD.TooManyPublicMethods)
- * @SuppressWarnings(PHPMD.ExcessiveClassComplexity)
+ * @property int $id database column
+ * @property string|null $range_id database column
+ * @property string|null $range_type database column
+ * @property int $structural_element_id database column
+ * @property string $content_type database column
+ * @property int $public database column
+ * @property string|null $creator_id database column
+ * @property int|null $release_date database column
+ * @property int|null $withdraw_date database column
+ * @property \JSONArrayObject $config database column
+ * @property int $mkdate database column
+ * @property int $chdate database column
+ * @property \Course|null $course belongs_to \Course
+ * @property \User|null $user belongs_to \User
+ * @property \User|null $creator belongs_to \User
+ * @property StructuralElement $structural_element has_one StructuralElement
  */
 
 class Unit extends \SimpleORMap implements \PrivacyObject
@@ -37,7 +37,7 @@ class Unit extends \SimpleORMap implements \PrivacyObject
     {
         $config['db_table'] = 'cw_units';
 
-        $config['serialized_fields']['config'] = 'JSONArrayObject';
+        $config['serialized_fields']['config'] = JSONArrayObject::class;
 
         $config['has_one']['structural_element'] = [
             'class_name' => StructuralElement::class,
diff --git a/lib/models/Courseware/UserDataField.php b/lib/models/Courseware/UserDataField.php
index af608809acd279f4a959f9442091ba93fa76ce26..011b9daa6d187a264a5e955c36f2b1713f5dd8e6 100644
--- a/lib/models/Courseware/UserDataField.php
+++ b/lib/models/Courseware/UserDataField.php
@@ -2,6 +2,8 @@
 
 namespace Courseware;
 
+use JSONArrayObject;
+
 /**
  * Courseware's user data fields.
  *
@@ -12,14 +14,14 @@ namespace Courseware;
  *
  * @since   Stud.IP 5.0
  *
- * @property array             $id       computed column read/write
- * @property string            $user_id  database column
- * @property id                $block_id database column
- * @property \JSONArrayObject  $payload  database column
- * @property int               $mkdate   database column
- * @property int               $chdate   database column
- * @property \Courseware\Block $block    belongs_to Courseware\Block
- * @property \User             $user     belongs_to User
+ * @property array $id alias for pk
+ * @property string $user_id database column
+ * @property int $block_id database column
+ * @property \JSONArrayObject $payload database column
+ * @property int $mkdate database column
+ * @property int $chdate database column
+ * @property Block $block belongs_to Block
+ * @property \User $user belongs_to \User
  */
 class UserDataField extends \SimpleORMap implements \PrivacyObject
 {
@@ -27,7 +29,7 @@ class UserDataField extends \SimpleORMap implements \PrivacyObject
     {
         $config['db_table'] = 'cw_user_data_fields';
 
-        $config['serialized_fields']['payload'] = 'JSONArrayObject';
+        $config['serialized_fields']['payload'] = JSONArrayObject::class;
 
         $config['belongs_to']['block'] = [
             'class_name' => Block::class,
diff --git a/lib/models/Courseware/UserProgress.php b/lib/models/Courseware/UserProgress.php
index 195fd89222ba5373c191979ab720f75821d5adf6..0cecf228fd984f1c56863593ff8103f050509d6c 100644
--- a/lib/models/Courseware/UserProgress.php
+++ b/lib/models/Courseware/UserProgress.php
@@ -12,14 +12,14 @@ namespace Courseware;
  *
  * @since   Stud.IP 5.0
  *
- * @property array             $id       computed column read/write
- * @property string            $user_id  database column
- * @property int               $block_id database column
- * @property string            $grade    database column
- * @property string            $mkdate   database column
- * @property string            $chdate   database column
- * @property \Courseware\Block $block    belongs_to Courseware\Block
- * @property \User             $user     belongs_to User
+ * @property array $id alias for pk
+ * @property string $user_id database column
+ * @property int $block_id database column
+ * @property float $grade database column
+ * @property int $mkdate database column
+ * @property int $chdate database column
+ * @property Block $block belongs_to Block
+ * @property \User $user belongs_to \User
  */
 class UserProgress extends \SimpleORMap implements \PrivacyObject
 {
diff --git a/lib/models/CronjobLog.class.php b/lib/models/CronjobLog.class.php
index 942bf6a8ce767cc1b2e5bd3f80139d3d34439c0d..c9e92f796dc7a1c1e47f57a339576375ceb60034 100644
--- a/lib/models/CronjobLog.class.php
+++ b/lib/models/CronjobLog.class.php
@@ -27,15 +27,15 @@
  * @category    Stud.IP
  * @since       2.4
  *
- * @property string log_id database column
- * @property string id alias column for log_id
- * @property string schedule_id database column
- * @property string scheduled database column
- * @property string executed database column
- * @property string exception database column
- * @property string output database column
- * @property string duration database column
- * @property CronjobSchedule schedule belongs_to CronjobSchedule
+ * @property string $id alias column for log_id
+ * @property string $log_id database column
+ * @property string $schedule_id database column
+ * @property int $scheduled database column
+ * @property int $executed database column
+ * @property string|null $exception database column
+ * @property string|null $output database column
+ * @property float $duration database column
+ * @property CronjobSchedule $schedule belongs_to CronjobSchedule
  */
 
 class CronjobLog extends SimpleORMap
diff --git a/lib/models/CronjobSchedule.class.php b/lib/models/CronjobSchedule.class.php
index 028eed7b12ed63c5920498c663823c53524dea03..6fcb68ff9651936362af1eff40ab6b7131c498c3 100644
--- a/lib/models/CronjobSchedule.class.php
+++ b/lib/models/CronjobSchedule.class.php
@@ -27,28 +27,28 @@
  * @category    Stud.IP
  * @since       2.4
  *
- * @property string schedule_id database column
- * @property string id alias column for schedule_id
- * @property string task_id database column
- * @property string active database column
- * @property string title database column
- * @property string description database column
- * @property string parameters database column
- * @property string priority database column
- * @property string type database column
- * @property string minute database column
- * @property string hour database column
- * @property string day database column
- * @property string month database column
- * @property string day_of_week database column
- * @property string next_execution database column
- * @property string last_execution database column
- * @property string last_result database column
- * @property string execution_count database column
- * @property string mkdate database column
- * @property string chdate database column
- * @property SimpleORMapCollection logs has_many CronjobLog
- * @property CronjobTask task belongs_to CronjobTask
+ * @property string $id alias column for schedule_id
+ * @property string $schedule_id database column
+ * @property string $task_id database column
+ * @property int $active database column
+ * @property string|null $title database column
+ * @property string|null $description database column
+ * @property string|null $parameters database column
+ * @property string $priority database column
+ * @property string $type database column
+ * @property int|null $minute database column
+ * @property int|null $hour database column
+ * @property int|null $day database column
+ * @property int|null $month database column
+ * @property int|null $day_of_week database column
+ * @property int $next_execution database column
+ * @property int|null $last_execution database column
+ * @property string|null $last_result database column
+ * @property int $execution_count database column
+ * @property int $mkdate database column
+ * @property int $chdate database column
+ * @property SimpleORMapCollection|CronjobLog[] $logs has_many CronjobLog
+ * @property CronjobTask $task belongs_to CronjobTask
  */
 
 class CronjobSchedule extends SimpleORMap
diff --git a/lib/models/CronjobTask.class.php b/lib/models/CronjobTask.class.php
index 0313e9b8f1d1c24ef25acdd814a4a163964309cf..f235951618f0df598de6f9724a71814d7806830a 100644
--- a/lib/models/CronjobTask.class.php
+++ b/lib/models/CronjobTask.class.php
@@ -27,18 +27,19 @@
  * @category    Stud.IP
  * @since       2.4
  *
- * @property string task_id database column
- * @property string id alias column for task_id
- * @property string filename database column
- * @property string class database column
- * @property string active database column
- * @property string execution_count database column
- * @property string assigned_count database column
- * @property SimpleORMapCollection schedules has_many CronjobSchedule
- *
- * @property string $description
- * @property string $name
- * @property array $parameters
+ * @property string $id alias column for task_id
+ * @property string $task_id database column
+ * @property string $filename database column
+ * @property string $class database column
+ * @property int $active database column
+ * @property int $execution_count database column
+ * @property int $assigned_count database column
+ * @property int|null $mkdate database column
+ * @property int|null $chdate database column
+ * @property SimpleORMapCollection|CronjobSchedule[] $schedules has_many CronjobSchedule
+ * @property-read mixed $description additional field
+ * @property-read mixed $name additional field
+ * @property-read mixed $parameters additional field
  */
 class CronjobTask extends SimpleORMap
 {
diff --git a/lib/models/DataField.class.php b/lib/models/DataField.class.php
index ae7b7ac5d63b77c69089734fa6299ba155113bbe..2d745a9de6bdab7f3461f1f4916c3cb6555dfeb2 100644
--- a/lib/models/DataField.class.php
+++ b/lib/models/DataField.class.php
@@ -13,25 +13,27 @@
  * @license     http://www.gnu.org/licenses/gpl-2.0.html GPL version 2
  * @category    Stud.IP
  *
- * @property string datafield_id database column
- * @property string id alias column for datafield_id
- * @property string name database column
- * @property string object_type database column
- * @property string object_class database column
- * @property string edit_perms database column
- * @property string view_perms database column
- * @property string institut_id database column
- * @property string system database column
- * @property string priority database column
- * @property string mkdate database column
- * @property string chdate database column
- * @property string type database column
- * @property string typeparam database column
- * @property string is_required database column
- * @property string default_value database column
- * @property string is_userfilter database column
- * @property string description database column
- * @property SimpleORMapCollection entries has_many DatafieldEntryModel
+ * @property string $id alias column for datafield_id
+ * @property string $datafield_id database column
+ * @property I18NString|null $name database column
+ * @property string|null $object_type database column
+ * @property string|null $object_class database column
+ * @property string|null $edit_perms database column
+ * @property string|null $view_perms database column
+ * @property string|null $institut_id database column
+ * @property int $priority database column
+ * @property int|null $mkdate database column
+ * @property int|null $chdate database column
+ * @property string $type database column
+ * @property string $typeparam database column
+ * @property int $is_required database column
+ * @property string|null $default_value database column
+ * @property int $is_userfilter database column
+ * @property string $description database column
+ * @property int $system database column
+ * @property SimpleORMapCollection|DatafieldEntryModel[] $entries has_many DatafieldEntryModel
+ * @property SimpleORMapCollection|User_Visibility_Settings[] $visibility_settings has_many User_Visibility_Settings
+ * @property mixed $institution additional field
  */
 class DataField extends SimpleORMap implements PrivacyObject
 {
diff --git a/lib/models/DatafieldEntryModel.class.php b/lib/models/DatafieldEntryModel.class.php
index e1c24064f1a86bf3894257722cb1afb9605bd357..33503e312fc48d4be56ffb3be22caf1e1df4403b 100644
--- a/lib/models/DatafieldEntryModel.class.php
+++ b/lib/models/DatafieldEntryModel.class.php
@@ -13,15 +13,16 @@
  * @license     http://www.gnu.org/licenses/gpl-2.0.html GPL version 2
  * @category    Stud.IP
  *
- * @property string datafield_id database column
- * @property string range_id database column
- * @property string content database column
- * @property string mkdate database column
- * @property string chdate database column
- * @property string sec_range_id database column
- * @property string name computed column read/write
- * @property string id computed column read/write
- * @property Datafield datafield belongs_to Datafield
+ * @property array $id alias for pk
+ * @property string $datafield_id database column
+ * @property string $range_id database column
+ * @property string|null $content database column
+ * @property int|null $mkdate database column
+ * @property int|null $chdate database column
+ * @property string $sec_range_id database column
+ * @property string $lang database column
+ * @property DataField $datafield belongs_to DataField
+ * @property mixed $name additional field
  */
 
 class DatafieldEntryModel extends SimpleORMap implements PrivacyObject
diff --git a/lib/models/DatafieldEntryModelI18N.class.php b/lib/models/DatafieldEntryModelI18N.class.php
index bea234df067bcea3a19e3a58a85c3e5094b348a1..aa93a638e66ab502bbeff3c0d1c861b90ca26a8a 100644
--- a/lib/models/DatafieldEntryModelI18N.class.php
+++ b/lib/models/DatafieldEntryModelI18N.class.php
@@ -14,15 +14,16 @@
  * @category    Stud.IP
  * @since       4.1
  *
- * @property string datafield_id database column
- * @property string range_id database column
- * @property string content database column
- * @property string mkdate database column
- * @property string chdate database column
- * @property string sec_range_id database column
- * @property string name computed column read/write
- * @property string id computed column read/write
- * @property Datafield datafield belongs_to Datafield
+ * @property array $id alias for pk
+ * @property string $datafield_id database column
+ * @property string $range_id database column
+ * @property I18NString|null $content database column
+ * @property int|null $mkdate database column
+ * @property int|null $chdate database column
+ * @property string $sec_range_id database column
+ * @property string $lang database column
+ * @property DataField $datafield belongs_to DataField
+ * @property mixed $name additional field
  */
 
 class DatafieldEntryModelI18N extends DatafieldEntryModel
diff --git a/lib/models/Degree.class.php b/lib/models/Degree.class.php
index c5b83c5d14c4e4fe740b326cad138e0d0f4ac6f5..6fef8342b489f954a097316ebe00f81c46f1f317 100644
--- a/lib/models/Degree.class.php
+++ b/lib/models/Degree.class.php
@@ -13,12 +13,17 @@
  * @license     http://www.gnu.org/licenses/gpl-2.0.html GPL version 2
  * @category    Stud.IP
  *
- * @property string abschluss_id database column
- * @property string id alias column for abschluss_id
- * @property string name database column
- * @property string beschreibung database column
- * @property string mkdate database column
- * @property string chdate database column
+ * @property string $id alias column for abschluss_id
+ * @property string $abschluss_id database column
+ * @property string $name database column
+ * @property string|null $name_kurz database column
+ * @property string|null $beschreibung database column
+ * @property string $author_id database column
+ * @property string $editor_id database column
+ * @property int|null $mkdate database column
+ * @property int|null $chdate database column
+ * @property SimpleORMapCollection|StudyCourse[] $professions has_and_belongs_to_many StudyCourse
+ * @property-read mixed $count_user additional field
  */
 class Degree extends SimpleORMap
 {
diff --git a/lib/models/Deputy.php b/lib/models/Deputy.php
index eef56d4e1f37f11fb9d1fc5ac120b6c00552cd9d..f433e221daf3ca559ea02bc99c9cb70a201de466 100644
--- a/lib/models/Deputy.php
+++ b/lib/models/Deputy.php
@@ -13,14 +13,26 @@
  * @license     http://www.gnu.org/licenses/gpl-2.0.html GPL version 2
  * @category    Stud.IP
  *
- * @property string range_id database column
- * @property string user_id database column
- * @property string gruppe database column
- * @property string notification database column
- * @property string edit_about database column
- * @property User deputy belongs_to User
- * @property Course course belongs_to Course
- * @property User boss has_one User
+ * @property array $id alias for pk
+ * @property string $range_id database column
+ * @property string $user_id database column
+ * @property int $gruppe database column
+ * @property int $notification database column
+ * @property int $edit_about database column
+ * @property int|null $mkdate database column
+ * @property int|null $chdate database column
+ * @property User $deputy belongs_to User
+ * @property Course $course belongs_to Course
+ * @property User $boss belongs_to User
+ * @property mixed $vorname additional field
+ * @property mixed $nachname additional field
+ * @property mixed $username additional field
+ * @property mixed $perms additional field
+ * @property mixed $boss_vorname additional field
+ * @property mixed $boss_nachname additional field
+ * @property mixed $boss_username additional field
+ * @property mixed $course_name additional field
+ * @property mixed $course_number additional field
  */
 class Deputy extends SimpleORMap
 {
diff --git a/lib/models/EventData.class.php b/lib/models/EventData.class.php
index e5e41401e12a4aeecac4ee639e59f72285755628..75e6f0c36ea03adb2084d5da25c041458ab2fe9c 100644
--- a/lib/models/EventData.class.php
+++ b/lib/models/EventData.class.php
@@ -11,6 +11,38 @@
  * @license     http://www.gnu.org/licenses/gpl-2.0.html GPL version 2
  * @category    Stud.IP
  * @since       3.2
+ *
+ * @property string $id alias column for event_id
+ * @property string $event_id database column
+ * @property string $author_id database column
+ * @property string|null $editor_id database column
+ * @property string $uid database column
+ * @property int $start database column
+ * @property int $end database column
+ * @property string $summary database column
+ * @property string|null $description database column
+ * @property string $class database column
+ * @property string|null $categories database column
+ * @property int $category_intern database column
+ * @property int $priority database column
+ * @property string|null $location database column
+ * @property int $ts database column
+ * @property int|null $linterval database column
+ * @property int|null $sinterval database column
+ * @property string|null $wdays database column
+ * @property int|null $month database column
+ * @property int|null $day database column
+ * @property string $rtype database column
+ * @property int $duration database column
+ * @property int|null $count database column
+ * @property int $expire database column
+ * @property string|null $exceptions database column
+ * @property int $mkdate database column
+ * @property int $chdate database column
+ * @property int $importdate database column
+ * @property SimpleORMapCollection|CalendarEvent[] $calendars has_many CalendarEvent
+ * @property User $author belongs_to User
+ * @property User|null $editor belongs_to User
  */
 
 class EventData extends SimpleORMap implements PrivacyObject
diff --git a/lib/models/ExternalUser.php b/lib/models/ExternalUser.php
index 53a079ac5834cc262b15f4dc37fa771be8a3bb33..73b79178be6a1142458e68044d92893f2c227470 100644
--- a/lib/models/ExternalUser.php
+++ b/lib/models/ExternalUser.php
@@ -12,6 +12,18 @@
  * @license     http://www.gnu.org/licenses/gpl-2.0.html GPL version 2
  * @category    Stud.IP
  * @since       5.0
+ *
+ * @property string $id alias column for external_contact_id
+ * @property string $external_contact_id database column
+ * @property string|null $foreign_id database column
+ * @property string|null $host_id database column
+ * @property string $contact_type database column
+ * @property string $name database column
+ * @property string|null $avatar_url database column
+ * @property JSONArrayObject|null $data database column
+ * @property int $chdate database column
+ * @property int $mkdate database column
+ * @property OERHost|null $host belongs_to OERHost
  */
 
 class ExternalUser extends SimpleORMap
@@ -28,7 +40,7 @@ class ExternalUser extends SimpleORMap
             'class_name' => OERHost::class,
             'foreign_key' => 'host_id'
         ];
-        $config['serialized_fields']['data'] = 'JSONArrayObject';
+        $config['serialized_fields']['data'] = JSONArrayObject::class;
         parent::configure($config);
     }
 }
diff --git a/lib/models/Fach.php b/lib/models/Fach.php
index cc5d9145f059471197da69332b8f265dcafe2331..24a1a6c50763694cf26f8101b911ecb34c727ccf 100644
--- a/lib/models/Fach.php
+++ b/lib/models/Fach.php
@@ -12,6 +12,27 @@
  * @license     http://www.gnu.org/licenses/gpl-2.0.html GPL version 2
  * @category    Stud.IP
  * @since       3.5
+ *
+ * @property string $id alias column for fach_id
+ * @property string $fach_id database column
+ * @property I18NString $name database column
+ * @property I18NString|null $name_kurz database column
+ * @property I18NString|null $beschreibung database column
+ * @property string|null $schlagworte database column
+ * @property string $author_id database column
+ * @property string $editor_id database column
+ * @property int $mkdate database column
+ * @property int $chdate database column
+ * @property SimpleORMapCollection|Abschluss[] $abschluesse has_many Abschluss
+ * @property SimpleORMapCollection|StudiengangTeil[] $studiengangteile has_many StudiengangTeil
+ * @property SimpleORMapCollection|FachFachbereich[] $department_assignments has_many FachFachbereich
+ * @property SimpleORMapCollection|Fachbereich[] $departments has_and_belongs_to_many Fachbereich
+ * @property SimpleORMapCollection|Abschluss[] $degrees has_and_belongs_to_many Abschluss
+ * @property mixed $count_abschluesse additional field
+ * @property mixed $count_user additional field
+ * @property mixed $count_sem additional field
+ * @property mixed $count_stgteile additional field
+ * @property-read mixed $count_module additional field
  */
 
 class Fach extends ModuleManagementModelTreeItem implements PrivacyObject
diff --git a/lib/models/FachFachbereich.php b/lib/models/FachFachbereich.php
index 0de44547c67b61797a52c340f15a3fccb9647fc8..e22c764f2acf36d08524aa7eb6566717fc4c2122 100644
--- a/lib/models/FachFachbereich.php
+++ b/lib/models/FachFachbereich.php
@@ -1,5 +1,5 @@
 <?php
-/*
+/**
  * FachFachbereich.php
  * Model class for assignments of Faecher to Fachbereiche (aka institutes).
  * (table mvv_fach_inst)
@@ -13,6 +13,17 @@
  * @license     http://www.gnu.org/licenses/gpl-2.0.html GPL version 2
  * @category    Stud.IP
  * @since       3.5
+ *
+ * @property array $id alias for pk
+ * @property string $fach_id database column
+ * @property string $institut_id database column
+ * @property int $position database column
+ * @property string $author_id database column
+ * @property string $editor_id database column
+ * @property int $mkdate database column
+ * @property int $chdate database column
+ * @property Fach $fach belongs_to Fach
+ * @property Fachbereich $fachbereich belongs_to Fachbereich
  */
 
 class FachFachbereich extends ModuleManagementModel
diff --git a/lib/models/Fachbereich.php b/lib/models/Fachbereich.php
index 19b88a4b9d13bdccf05f85743d1a75352559d082..7e1586514df87355ad1aac5112f8ede99a2230c7 100644
--- a/lib/models/Fachbereich.php
+++ b/lib/models/Fachbereich.php
@@ -1,5 +1,5 @@
 <?php
-/*
+/**
  * Fachbereich.php
  * model class for Fachbereiche (aka institutes)
  *
@@ -12,6 +12,25 @@
  * @license     http://www.gnu.org/licenses/gpl-2.0.html GPL version 2
  * @category    Stud.IP
  * @since       3.5
+ *
+ * @property string $id alias column for institut_id
+ * @property string $institut_id database column
+ * @property I18NString $name database column
+ * @property string $fakultaets_id database column
+ * @property string $strasse database column
+ * @property string $plz database column
+ * @property string $url database column
+ * @property string $telefon database column
+ * @property string $email database column
+ * @property string $fax database column
+ * @property int $type database column
+ * @property int $mkdate database column
+ * @property int $chdate database column
+ * @property string|null $lit_plugin_name database column
+ * @property int $srienabled database column
+ * @property string $lock_rule database column
+ * @property-read mixed $count_objects additional field
+ * @property-read mixed $count_module additional field
  */
 
 class Fachbereich extends ModuleManagementModelTreeItem
diff --git a/lib/models/FeedbackElement.php b/lib/models/FeedbackElement.php
index 08b5aa170ec5b261a321b8684d3062fa9575a85e..63a2186a04659ade881dd5ec4dabca6415234f76 100644
--- a/lib/models/FeedbackElement.php
+++ b/lib/models/FeedbackElement.php
@@ -4,31 +4,32 @@
  *
  * @author Nils Gehrke <nils.gehrke@uni-goettingen.de>
  *
+ * The column "range_type" represents the name of a class that implements
+ * FeedbackRange.
+ *
  * @property int $id database column
  * @property string $user_id database column
  * @property string $range_id database column
- * @property string $range_type database column:
- *                  name of class that implements FeedbackRange
- *
+ * @property string $range_type database column
  * @property string $course_id database column
  * @property string $question database column
  * @property string $description database column
- * @property int $mode database column:
- *                  0 without rating;
- *                  1 with star rating from 1 to 5;
- *                  2 with star rating from 1 to 10;
- *
- * @property boolean $results_visible database column:
- *                   show rating results to users after feedback submission
- * @property boolean $commentable database column: users may comment ratings
- *
- * @property Feedbackentry[]|SimpleORMapCollection $entries
- * @property Course $course
- * @property User $user
+ * @property int $mode database column
+ * @property int $results_visible database column
+ * @property int $commentable database column
+ * @property int $mkdate database column
+ * @property int $chdate database column
+ * @property SimpleORMapCollection|FeedbackEntry[] $entries has_many FeedbackEntry
+ * @property Course $course belongs_to Course
+ * @property User $user belongs_to User
  */
 
 class FeedbackElement extends SimpleORMap
 {
+    public const MODE_NO_RATING = 0;
+    public const MODE_5STAR_RATING = 1;
+    public const MODE_10STAR_RATING = 2;
+
     public static function configure($config = [])
     {
         $config['db_table'] = 'feedback';
@@ -144,12 +145,10 @@ class FeedbackElement extends SimpleORMap
     public function getMaxRating()
     {
         switch ($this->mode) {
-            case 1:
-                // 5 Stars Rating
+            case self::MODE_5STAR_RATING:
                 return 5;
                 break;
-            case 2:
-                // 10 Stars Rating
+            case self::MODE_10STAR_RATING:
                 return 10;
                 break;
             default:
diff --git a/lib/models/FeedbackEntry.php b/lib/models/FeedbackEntry.php
index be370619162c06e2cbdbf3fe871ce4930c48fa4d..4b4ea7c35642fc0984ad680336571a70134aa88c 100644
--- a/lib/models/FeedbackEntry.php
+++ b/lib/models/FeedbackEntry.php
@@ -9,9 +9,10 @@
  * @property string $user_id database column
  * @property string $comment database column
  * @property int $rating database column
- *
- * @property FeedbackElement $feedback
- * @property User $user
+ * @property int $mkdate database column
+ * @property int $chdate database column
+ * @property FeedbackElement $feedback belongs_to FeedbackElement
+ * @property User $user belongs_to User
  */
 
 class FeedbackEntry extends SimpleORMap
diff --git a/lib/models/File.php b/lib/models/File.php
index 16c81efa19566b8e212ffe68e7765badb227994d..097d2a31b38ec8a9cae04ad0e370115cf669ca9c 100644
--- a/lib/models/File.php
+++ b/lib/models/File.php
@@ -13,20 +13,21 @@
  * @license     http://www.gnu.org/licenses/gpl-2.0.html GPL version 2
  * @category    Stud.IP
  *
- *
- * @property string id database column
- * @property string user_id database column
- * @property string mime_type database column
- * @property string name database column
- * @property string size database column
- * @property string filetype database column
- * @property string metadata database column
- * @property string author_name database column
- * @property string mkdate database column
- * @property string chdate database column
- * @property SimpleORMap owner belongs_to User
- * @property SimpleORMap url has_one FileURL
- * @property SimpleORMapCollection refs has_many FileReference
+ * @property string $id database column
+ * @property string $user_id database column
+ * @property string $mime_type database column
+ * @property string $name database column
+ * @property string|null $filetype database column
+ * @property int $size database column
+ * @property JSONArrayObject|null $metadata database column
+ * @property string $author_name database column
+ * @property int|null $is_accessible database column
+ * @property int $mkdate database column
+ * @property int $chdate database column
+ * @property SimpleORMapCollection|FileRef[] $refs has_many FileRef
+ * @property User $owner belongs_to User
+ * @property mixed $extension additional field
+ * @property mixed $path additional field
  */
 class File extends SimpleORMap
 {
@@ -48,7 +49,7 @@ class File extends SimpleORMap
         $config['additional_fields']['extension'] = true;
         $config['additional_fields']['path'] = true;
 
-        $config['serialized_fields']['metadata'] = 'JSONArrayObject';
+        $config['serialized_fields']['metadata'] = JSONArrayObject::class;
 
         $config['registered_callbacks']['after_delete'][] = 'deleteDataFile';
         $config['registered_callbacks']['before_create'][] = 'cbSetAuthor';
diff --git a/lib/models/FileRef.php b/lib/models/FileRef.php
index fe878a840f2e2ee5b0dbb33c0cf7a0bccb8f3163..c70d1714bead2e8cb645a73fc584efdd050965d4 100644
--- a/lib/models/FileRef.php
+++ b/lib/models/FileRef.php
@@ -13,22 +13,27 @@
  * @license     http://www.gnu.org/licenses/gpl-2.0.html GPL version 2
  * @category    Stud.IP
  *
- *
- * @property string id database column
- * @property string file_id database column
- * @property string folder_id database column
- * @property string user_id database column
- * @property string name database column
- * @property string downloads database column
- * @property string description database column
- * @property string license database column
- * @property string content_terms_of_use_id database column
- * @property string mkdate database column
- * @property string chdate database column
- * @property SimpleORMap file belongs_to File
- * @property SimpleORMap folder belongs_to Folder
- * @property SimpleORMap owner belongs_to User
- * @property SimpleORMap terms_of_use belongs_to ContentTermsOfUse
+ * @property string $id database column
+ * @property string $file_id database column
+ * @property string $folder_id database column
+ * @property int $downloads database column
+ * @property string $description database column
+ * @property string $content_terms_of_use_id database column
+ * @property string $user_id database column
+ * @property string $name database column
+ * @property int $mkdate database column
+ * @property int $chdate database column
+ * @property File $file belongs_to File
+ * @property Folder $folder belongs_to Folder
+ * @property User $owner belongs_to User
+ * @property ContentTermsOfUse $terms_of_use belongs_to ContentTermsOfUse
+ * @property mixed $size additional field
+ * @property mixed $mime_type additional field
+ * @property mixed $download_url additional field
+ * @property-read mixed $author_name additional field
+ * @property-read mixed $is_accessible additional field
+ * @property-read mixed $is_link additional field
+ * @property mixed $foldertype additional field
  */
 class FileRef extends SimpleORMap implements PrivacyObject, FeedbackRange
 {
diff --git a/lib/models/Folder.php b/lib/models/Folder.php
index 9faa76a7541e136461b2438106b9d350552c1f45..630a157da99048c56fd318742b39bfd37e71a259 100644
--- a/lib/models/Folder.php
+++ b/lib/models/Folder.php
@@ -13,17 +13,26 @@
  * @license     http://www.gnu.org/licenses/gpl-2.0.html GPL version 2
  * @category    Stud.IP
  *
- * @property string id database column
- * @property string user_id database column: owner of folder
- * @property string parent_id database column: parent folder
- * @property string range_id database column: user-ID, course-ID, institute-ID etc.
- * @property string range_type database column: 'course', 'institute', 'user', ...
- * @property string folder_type database column
- * @property string name database column: folder name
- * @property string data_content database column
- * @property string description database column
- * @property string mkdate database column
- * @property string chdate database column
+ * @property string $id database column
+ * @property string $user_id database column
+ * @property string $parent_id database column
+ * @property string $range_id database column
+ * @property string $range_type database column
+ * @property string $folder_type database column
+ * @property string $name database column
+ * @property JSONArrayObject $data_content database column
+ * @property string $description database column
+ * @property int $mkdate database column
+ * @property int $chdate database column
+ * @property SimpleORMapCollection|FileRef[] $file_refs has_many FileRef
+ * @property SimpleORMapCollection|Folder[] $subfolders has_many Folder
+ * @property User $owner belongs_to User
+ * @property Folder $parentfolder belongs_to Folder
+ * @property Course $course belongs_to Course
+ * @property Institute $institute belongs_to Institute
+ * @property User $user belongs_to User
+ * @property Message $message belongs_to Message
+ * @property-read mixed $is_empty additional field
  */
 class Folder extends SimpleORMap implements FeedbackRange
 {
@@ -72,7 +81,7 @@ class Folder extends SimpleORMap implements FeedbackRange
             'class_name'  => Message::class,
             'foreign_key' => 'range_id',
         ];
-        $config['serialized_fields']['data_content'] = 'JSONArrayObject';
+        $config['serialized_fields']['data_content'] = JSONArrayObject::class;
 
         $config['registered_callbacks']['before_store'][] = 'cbMakeUniqueName';
         $config['registered_callbacks']['after_delete'][] = 'cbRemoveFeedbackElements';
diff --git a/lib/models/ForumCat.php b/lib/models/ForumCat.php
index c963b691f75d6a8792973612f5b7fbd18c0b7385..069f097c81c000382eb99b9fe95c4f7e691efeb2 100644
--- a/lib/models/ForumCat.php
+++ b/lib/models/ForumCat.php
@@ -10,6 +10,12 @@
  * @author      Till Glöggler <tgloeggl@uos.de>
  * @license     http://www.gnu.org/licenses/gpl-3.0.html GPL version 3
  * @category    Stud.IP
+ *
+ * @property string $id alias column for category_id
+ * @property string $category_id database column
+ * @property string $seminar_id database column
+ * @property string $entry_name database column
+ * @property int $pos database column
  */
 
 class ForumCat extends SimpleORMap
diff --git a/lib/models/Freetext.php b/lib/models/Freetext.php
index 4922030e69d4382b995c6668cb17cbc7ec572097..52182de05510b1ef09dbe0a08f751225275ee502 100644
--- a/lib/models/Freetext.php
+++ b/lib/models/Freetext.php
@@ -2,6 +2,21 @@
 
 require_once 'lib/classes/QuestionType.interface.php';
 
+/**
+ * @license GPL2 or any later version
+ *
+ * @property string $id alias column for question_id
+ * @property string $question_id database column
+ * @property string $questionnaire_id database column
+ * @property string $questiontype database column
+ * @property string|null $internal_name database column
+ * @property JSONArrayObject $questiondata database column
+ * @property int $position database column
+ * @property int $chdate database column
+ * @property int $mkdate database column
+ * @property SimpleORMapCollection|QuestionnaireAnswer[] $answers has_many QuestionnaireAnswer
+ * @property Questionnaire $questionnaire belongs_to Questionnaire
+ */
 class Freetext extends QuestionnaireQuestion implements QuestionType
 {
     /**
diff --git a/lib/models/Grading/Definition.php b/lib/models/Grading/Definition.php
index ed6df556f33d9ca3178933cc9d5151424365f779..41b4f7171fb58c5f941582711eb80742d4700ff4 100644
--- a/lib/models/Grading/Definition.php
+++ b/lib/models/Grading/Definition.php
@@ -2,6 +2,22 @@
 
 namespace Grading;
 
+/**
+ * @license GPL2 or any later version
+ *
+ * @property int $id database column
+ * @property string $course_id database column
+ * @property string $item database column
+ * @property string $name database column
+ * @property string $tool database column
+ * @property string $category database column
+ * @property int $position database column
+ * @property float $weight database column
+ * @property int $mkdate database column
+ * @property int $chdate database column
+ * @property \SimpleORMapCollection|Instance[] $instances has_many Instance
+ * @property \Course $course belongs_to \Course
+ */
 class Definition extends \SimpleORMap
 {
     const CUSTOM_DEFINITIONS_CATEGORY = 'xyzzy';
diff --git a/lib/models/Grading/Instance.php b/lib/models/Grading/Instance.php
index 901fcff39cddc05dde0ebcf5fe55d8dc180e4fe9..14ab25a8c4c46767fe19b35bf08c0f4f03083c25 100644
--- a/lib/models/Grading/Instance.php
+++ b/lib/models/Grading/Instance.php
@@ -2,6 +2,19 @@
 
 namespace Grading;
 
+/**
+ * @license GPL2 or any later version
+ *
+ * @property array $id alias for pk
+ * @property int $definition_id database column
+ * @property string $user_id database column
+ * @property float $rawgrade database column
+ * @property string|null $feedback database column
+ * @property int $mkdate database column
+ * @property int $chdate database column
+ * @property \User $user belongs_to \User
+ * @property Definition $definition belongs_to Definition
+ */
 class Instance extends \SimpleORMap
 {
     protected static function configure($config = [])
diff --git a/lib/models/HelpContent.class.php b/lib/models/HelpContent.class.php
index b254e2145658b73c2820b131d42e1376efd3ea78..f1e61b1a3c6d8ffcb4cd3e0de1287bd0f824b105 100644
--- a/lib/models/HelpContent.class.php
+++ b/lib/models/HelpContent.class.php
@@ -26,22 +26,22 @@
  * @author   Arne Schröder <schroeder@data-quest>
  * @access   public
  *
+ * @property string $id alias column for content_id
+ * @property string $global_content_id database column
  * @property string $content_id database column
  * @property string $language database column
- * @property string $label database column
- * @property string $icon database column
  * @property string $content database column
- * @property string $comment database column
  * @property string $route database column
  * @property string $studip_version database column
- * @property string $position database column
- * @property string $custom database column
- * @property string $visible database column
+ * @property int $position database column
+ * @property int $custom database column
+ * @property int $visible database column
  * @property string $author_email database column
  * @property string $installation_id database column
- * @property string $mkdate database column
- * @property string $chdate database column
- * @property User|null $author has_one author
+ * @property int $mkdate database column
+ * @property int $chdate database column
+ * @property string|null $comment database column
+ * @property User $author has_one User
  */
 class HelpContent extends SimpleORMap
 {
diff --git a/lib/models/HelpTour.class.php b/lib/models/HelpTour.class.php
index 18ed68ecaa29edb8ecdcb18552747b80f8025f10..68bd8307ba19fa439241ebf638117d6d315043bd 100644
--- a/lib/models/HelpTour.class.php
+++ b/lib/models/HelpTour.class.php
@@ -29,21 +29,24 @@ require_once 'lib/object.inc.php';
  * @author   Arne Schröder <schroeder@data-quest>
  * @access   public
  *
- * @property string $tour_id database column
  * @property string $id alias column for tour_id
+ * @property string $global_tour_id database column
+ * @property string $tour_id database column
  * @property string $name database column
  * @property string $description database column
  * @property string $type database column
  * @property string $roles database column
- * @property string $version database column
+ * @property int $version database column
  * @property string $language database column
  * @property string $studip_version database column
  * @property string $installation_id database column
- * @property string $mkdate database column
- * @property SimpleORMapCollection $steps has_many HelpTourStep
- * @property SimpleORMapCollection $audiences has_many HelpTourAudience
+ * @property string $author_email database column
+ * @property int $mkdate database column
+ * @property int $chdate database column
+ * @property SimpleORMapCollection|HelpTourStep[] $steps has_many HelpTourStep
+ * @property SimpleORMapCollection|HelpTourAudience[] $audiences has_many HelpTourAudience
  * @property HelpTourSettings $settings has_one HelpTourSettings
- * @property User|null $author has_one author
+ * @property User $author has_one User
  */
 class HelpTour extends SimpleORMap
 {
diff --git a/lib/models/HelpTourAudience.class.php b/lib/models/HelpTourAudience.class.php
index 0d6e8c2402d7d806f055d6d0140b35c23dc8dac8..6255a465d2539719b39628811f620149020dd31e 100644
--- a/lib/models/HelpTourAudience.class.php
+++ b/lib/models/HelpTourAudience.class.php
@@ -29,11 +29,13 @@
  * @author      Arne Schröder <schroeder@data-quest>
  * @license     http://www.gnu.org/licenses/gpl-2.0.html GPL version 2
  * @category    Stud.IP
- * 
- * @property string tour_id database column
- * @property string range_id database column
- * @property string type database column
- * @property string id computed column read/write
+ *
+ * @property array $id alias for pk
+ * @property string $tour_id database column
+ * @property string $range_id database column
+ * @property string $type database column
+ * @property int|null $mkdate database column
+ * @property int|null $chdate database column
  */
 class HelpTourAudience extends SimpleORMap
 {
diff --git a/lib/models/HelpTourSettings.class.php b/lib/models/HelpTourSettings.class.php
index 7392c563f954e95396b82646e3a12fa685177f70..f24c86b276edd8d3a1e8c168c7711d14c159cb7b 100644
--- a/lib/models/HelpTourSettings.class.php
+++ b/lib/models/HelpTourSettings.class.php
@@ -29,11 +29,13 @@
  * @author      Arne Schröder <schroeder@data-quest>
  * @license     http://www.gnu.org/licenses/gpl-2.0.html GPL version 2
  * @category    Stud.IP
- * 
- * @property string tour_id database column
- * @property string id alias column for tour_id
- * @property string active database column
- * @property string access database column
+ *
+ * @property string $id alias column for tour_id
+ * @property string $tour_id database column
+ * @property int $active database column
+ * @property string|null $access database column
+ * @property int|null $mkdate database column
+ * @property int|null $chdate database column
  */
 class HelpTourSettings extends SimpleORMap
 {
diff --git a/lib/models/HelpTourStep.class.php b/lib/models/HelpTourStep.class.php
index d2ce1dcb3d7df598aaa7d78e7136fc2517e7e243..6f3132639fe46c8edbec89c8805b38283927510d 100644
--- a/lib/models/HelpTourStep.class.php
+++ b/lib/models/HelpTourStep.class.php
@@ -30,20 +30,22 @@
  * @license     http://www.gnu.org/licenses/gpl-2.0.html GPL version 2
  * @category    Stud.IP
  *
+ * @property array $id alias for pk
  * @property string $tour_id database column
- * @property string $step database column
+ * @property int $step database column
  * @property string $title database column
  * @property string $tip database column
  * @property string $orientation database column
- * @property string $interactive database column
+ * @property int $interactive database column
  * @property string $css_selector database column
  * @property string $route database column
+ * @property string $action_prev database column
+ * @property string $action_next database column
  * @property string $author_email database column
- * @property string $mkdate database column
- * @property string $chdate database column
- * @property string $id computed column read/write
+ * @property int $mkdate database column
+ * @property int $chdate database column
  * @property HelpTour $help_tour belongs_to HelpTour
- * @property User|null $author has_one author
+ * @property User $author has_one User
  */
 class HelpTourStep extends SimpleORMap
 {
diff --git a/lib/models/HelpTourUser.class.php b/lib/models/HelpTourUser.class.php
index 49b16479980c7f95dbfdeebc8ca9aa42ff19214b..aa2869d14855e53ec4a718d811c337800fe5c626 100644
--- a/lib/models/HelpTourUser.class.php
+++ b/lib/models/HelpTourUser.class.php
@@ -30,11 +30,13 @@
  * @license     http://www.gnu.org/licenses/gpl-2.0.html GPL version 2
  * @category    Stud.IP
  *
- * @property string tour_id database column
- * @property string user_id database column
- * @property string step_nr database column
- * @property string completed database column
- * @property string id computed column read/write
+ * @property array $id alias for pk
+ * @property string $tour_id database column
+ * @property string $user_id database column
+ * @property int $step_nr database column
+ * @property int $completed database column
+ * @property int|null $mkdate database column
+ * @property int|null $chdate database column
  */
 class HelpTourUser extends SimpleORMap implements PrivacyObject
 {
diff --git a/lib/models/Institute.class.php b/lib/models/Institute.class.php
index b6ec72bcdb1dff51f6afaa70fb99eb49002942cf..5a5a1d0b3c763f67044b36e1e5207319bd20a70c 100644
--- a/lib/models/Institute.class.php
+++ b/lib/models/Institute.class.php
@@ -13,33 +13,36 @@
  * @category    Stud.IP
  * @since       2.0
  *
- * @property string institut_id database column
- * @property string id alias column for institut_id
- * @property string name database column
- * @property string fakultaets_id database column
- * @property string strasse database column
- * @property string plz database column
- * @property string url database column
- * @property string telefon database column
- * @property string email database column
- * @property string fax database column
- * @property string type database column
- * @property string modules database column
- * @property string mkdate database column
- * @property string chdate database column
- * @property string lit_plugin_name database column
- * @property string srienabled database column
- * @property string lock_rule database column
- * @property string is_fak computed column
- * @property SimpleORMapCollection members has_many InstituteMember
- * @property SimpleORMapCollection home_courses has_many Course
- * @property SimpleORMapCollection sub_institutes has_many Institute
- * @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
+ * @property string $id alias column for institut_id
+ * @property string $institut_id database column
+ * @property I18NString $name database column
+ * @property string $fakultaets_id database column
+ * @property string $strasse database column
+ * @property string $plz database column
+ * @property string $url database column
+ * @property string $telefon database column
+ * @property string $email database column
+ * @property string $fax database column
+ * @property int $type database column
+ * @property int $mkdate database column
+ * @property int $chdate database column
+ * @property string|null $lit_plugin_name database column
+ * @property int $srienabled database column
+ * @property string $lock_rule database column
+ * @property SimpleORMapCollection|InstituteMember[] $members has_many InstituteMember
+ * @property SimpleORMapCollection|Course[] $home_courses has_many Course
+ * @property SimpleORMapCollection|Institute[] $sub_institutes has_many Institute
+ * @property SimpleORMapCollection|DatafieldEntryModel[] $datafields has_many DatafieldEntryModel
+ * @property SimpleORMapCollection|StudipScmEntry[] $scm has_many StudipScmEntry
+ * @property SimpleORMapCollection|Statusgruppen[] $status_groups has_many Statusgruppen
+ * @property SimpleORMapCollection|BlubberThread[] $blubberthreads has_many BlubberThread
+ * @property SimpleORMapCollection|ConsultationBlock[] $consultation_blocks has_many ConsultationBlock
+ * @property SimpleORMapCollection|ConsultationResponsibility[] $consultation_responsibilities has_many ConsultationResponsibility
+ * @property SimpleORMapCollection|ToolActivation[] $tools has_many ToolActivation
+ * @property Institute $faculty belongs_to Institute
+ * @property SimpleORMapCollection|Course[] $courses has_and_belongs_to_many Course
+ * @property-read mixed $is_fak additional field
+ * @property-read mixed $all_status_groups additional field
  */
 
 class Institute extends SimpleORMap implements Range
diff --git a/lib/models/InstituteMember.class.php b/lib/models/InstituteMember.class.php
index a501c61a303aefe6ff7c44a2c697632737c0742a..3a513fec12fc0450fb87b4b8628641fe4953e7d8 100644
--- a/lib/models/InstituteMember.class.php
+++ b/lib/models/InstituteMember.class.php
@@ -13,27 +13,30 @@
  * @license     http://www.gnu.org/licenses/gpl-2.0.html GPL version 2
  * @category    Stud.IP
  *
- * @property string user_id database column
- * @property string institut_id database column
- * @property string inst_perms database column
- * @property string sprechzeiten database column
- * @property string raum database column
- * @property string telefon database column
- * @property string fax database column
- * @property string externdefault database column
- * @property string priority database column
- * @property string visible database column
- * @property string vorname computed column read/write
- * @property string nachname computed column read/write
- * @property string username computed column read/write
- * @property string email computed column read/write
- * @property string title_front computed column read/write
- * @property string title_rear computed column read/write
- * @property string institute_name computed column read/write
- * @property string id computed column read/write
- * @property SimpleORMapCollection datafields has_many DatafieldEntryModel
- * @property User user belongs_to User
- * @property Institute institute belongs_to Institute
+ * @property int $id database column
+ * @property string $user_id database column
+ * @property string $institut_id database column
+ * @property string $inst_perms database column
+ * @property I18NString $sprechzeiten database column
+ * @property I18NString $raum database column
+ * @property I18NString $telefon database column
+ * @property I18NString $fax database column
+ * @property int $externdefault database column
+ * @property int $priority database column
+ * @property int $visible database column
+ * @property int|null $mkdate database column
+ * @property int|null $chdate database column
+ * @property SimpleORMapCollection|DatafieldEntryModel[] $datafields has_many DatafieldEntryModel
+ * @property User $user belongs_to User
+ * @property Institute $institute belongs_to Institute
+ * @property mixed $vorname additional field
+ * @property mixed $nachname additional field
+ * @property mixed $username additional field
+ * @property mixed $email additional field
+ * @property mixed $title_front additional field
+ * @property mixed $title_rear additional field
+ * @property mixed $user_info additional field
+ * @property mixed $institute_name additional field
  */
 class InstituteMember extends SimpleORMap implements PrivacyObject
 {
diff --git a/lib/models/InstitutePlanColumn.class.php b/lib/models/InstitutePlanColumn.class.php
index eb5c49f877c48b52b44c6539d55ca91a92b6af21..b5ec876d7a787fdd9b94083ab14b05df40eb4b1f 100644
--- a/lib/models/InstitutePlanColumn.class.php
+++ b/lib/models/InstitutePlanColumn.class.php
@@ -12,12 +12,14 @@
  * @license GPL2 or any version
  * @since   Stud.IP 4.5
  * *
- * @property string range_id database column
- * @property string column database column
- * @property string name database column
- * @property string visible database column
- * @property string mkdate database column
- * @property string chdate database column
+ *
+ * @property array $id alias for pk
+ * @property string $range_id database column
+ * @property int $column database column
+ * @property string|null $name database column
+ * @property int $visible database column
+ * @property int $mkdate database column
+ * @property int $chdate database column
  */
 class InstitutePlanColumn extends SimpleORMap
 {
diff --git a/lib/models/Kategorie.class.php b/lib/models/Kategorie.class.php
index 13c9c3a464fe3e0266fff07c8cc603c1b2a9f128..a43629f68e0196a08fd1280a832bc575aa627070 100644
--- a/lib/models/Kategorie.class.php
+++ b/lib/models/Kategorie.class.php
@@ -12,16 +12,15 @@
  * @category    Stud.IP
  * @since       2.4
  *
- * @property string $kategorie_id database column
  * @property string $id alias column for kategorie_id
+ * @property string $kategorie_id database column
  * @property string $range_id database column
- * @property string|I18NString $name database column
- * @property string|I18NString $content database column
+ * @property I18NString $name database column
+ * @property I18NString $content database column
  * @property int $mkdate database column
  * @property int $chdate database column
  * @property int $priority database column
- *
- * @property User $user
+ * @property User $user belongs_to User
  */
 
 class Kategorie extends SimpleORMap
diff --git a/lib/models/License.php b/lib/models/License.php
index 9dac65f81884cfd0b3d62736522fd3b80540c9de..88ef26f63ad53ce5e577af8f355b87d6d22d5667 100644
--- a/lib/models/License.php
+++ b/lib/models/License.php
@@ -1,5 +1,19 @@
 <?php
 
+/**
+ * @license GPL2 or any later version
+ *
+ * @property string $id alias column for identifier
+ * @property string $identifier database column
+ * @property string|null $name database column
+ * @property string|null $link database column
+ * @property int|null $default database column
+ * @property string|null $description database column
+ * @property string|null $twillo_licensekey database column
+ * @property string|null $twillo_cclicenseversion database column
+ * @property int|null $chdate database column
+ * @property int|null $mkdate database column
+ */
 class License extends SimpleORMap
 {
     protected static function configure($config = [])
diff --git a/lib/models/LikertScale.php b/lib/models/LikertScale.php
index 5e55e3c294d80fb1062b72e9e29ad31120582dff..5b2b4f592886e169583890c97a4a0cf3d1bc579a 100644
--- a/lib/models/LikertScale.php
+++ b/lib/models/LikertScale.php
@@ -1,6 +1,21 @@
 <?php
 require_once 'lib/classes/QuestionType.interface.php';
 
+/**
+ * @license GPL2 or any later version
+ *
+ * @property string $id alias column for question_id
+ * @property string $question_id database column
+ * @property string $questionnaire_id database column
+ * @property string $questiontype database column
+ * @property string|null $internal_name database column
+ * @property JSONArrayObject $questiondata database column
+ * @property int $position database column
+ * @property int $chdate database column
+ * @property int $mkdate database column
+ * @property SimpleORMapCollection|QuestionnaireAnswer[] $answers has_many QuestionnaireAnswer
+ * @property Questionnaire $questionnaire belongs_to Questionnaire
+ */
 class LikertScale extends QuestionnaireQuestion implements QuestionType
 {
     public static function getIcon(bool $active = false) : Icon
diff --git a/lib/models/LockRule.class.php b/lib/models/LockRule.class.php
index 3f07a10e503fbe50c0b1b434fb30fd56c8bc20d3..a3ef2713c3b133d2e2d13716a0289049f48b0ec0 100644
--- a/lib/models/LockRule.class.php
+++ b/lib/models/LockRule.class.php
@@ -23,14 +23,16 @@
  * @license     http://www.gnu.org/licenses/gpl-2.0.html GPL version 2
  * @category    Stud.IP
  *
- * @property string lock_id database column
- * @property string id alias column for lock_id
- * @property string permission database column
- * @property string name database column
- * @property string description database column
- * @property string attributes database column
- * @property string object_type database column
- * @property string user_id database column
+ * @property string $id alias column for lock_id
+ * @property string $lock_id database column
+ * @property string $permission database column
+ * @property string $name database column
+ * @property string $description database column
+ * @property JSONArrayObject $attributes database column
+ * @property string $object_type database column
+ * @property string $user_id database column
+ * @property int|null $mkdate database column
+ * @property int|null $chdate database column
  */
 
 class LockRule extends SimpleORMap
@@ -39,7 +41,7 @@ class LockRule extends SimpleORMap
     {
         $config['db_table'] = 'lock_rules';
 
-        $config['serialized_fields']['attributes'] = 'JSONArrayObject';
+        $config['serialized_fields']['attributes'] = JSONArrayObject::class;
 
         parent::configure($config);
     }
diff --git a/lib/models/LogAction.php b/lib/models/LogAction.php
index 2f004201f7577ea8d08e5b6eae2360f306189481..5ec4b7d73b75f48d29bd8659d25ca46fac5ba9f3 100644
--- a/lib/models/LogAction.php
+++ b/lib/models/LogAction.php
@@ -13,17 +13,20 @@
  * @license     http://www.gnu.org/licenses/gpl-2.0.html GPL version 2
  * @category    Stud.IP
  * @since       3.0
- * @property string action_id database column
- * @property string id alias column for action_id
- * @property string name database column
- * @property string description database column
- * @property string info_template database column
- * @property string active database column
- * @property string expires database column
- * @property string filename database column
- * @property string class database column
- * @property string type database column
- * @property SimpleORMapCollection events has_many LogEvent
+ *
+ * @property string $id alias column for action_id
+ * @property string $action_id database column
+ * @property string $name database column
+ * @property string|null $description database column
+ * @property string|null $info_template database column
+ * @property int $active database column
+ * @property int $expires database column
+ * @property string|null $filename database column
+ * @property string|null $class database column
+ * @property string|null $type database column
+ * @property int|null $mkdate database column
+ * @property int|null $chdate database column
+ * @property SimpleORMapCollection|LogEvent[] $events has_many LogEvent
  */
 class LogAction extends SimpleORMap
 {
diff --git a/lib/models/LogEvent.php b/lib/models/LogEvent.php
index 7205dbac5e5c2c92f830c6317080e792230abbb6..547447e48f19b09cff97fa085e9b01eb63274ab9 100644
--- a/lib/models/LogEvent.php
+++ b/lib/models/LogEvent.php
@@ -13,17 +13,18 @@
  * @license     http://www.gnu.org/licenses/gpl-2.0.html GPL version 2
  * @category    Stud.IP
  * @since       3.0
- * @property string event_id database column
- * @property string id alias column for event_id
- * @property string user_id database column
- * @property string action_id database column
- * @property string affected_range_id database column
- * @property string coaffected_range_id database column
- * @property string info database column
- * @property string dbg_info database column
- * @property string mkdate database column
- * @property LogAction action belongs_to LogAction
- * @property User user belongs_to User
+ *
+ * @property int $id alias column for event_id
+ * @property int $event_id database column
+ * @property string $user_id database column
+ * @property string $action_id database column
+ * @property string|null $affected_range_id database column
+ * @property string|null $coaffected_range_id database column
+ * @property string|null $info database column
+ * @property string|null $dbg_info database column
+ * @property int $mkdate database column
+ * @property LogAction $action belongs_to LogAction
+ * @property User $user belongs_to User
  */
 
 
diff --git a/lib/models/LoginBackground.class.php b/lib/models/LoginBackground.class.php
index df7fb9e5c1ff77eb5019f871d4a6e29d42008bca..3ede27551fee6c272ff71122bc6c723c24761dcb 100644
--- a/lib/models/LoginBackground.class.php
+++ b/lib/models/LoginBackground.class.php
@@ -12,11 +12,14 @@
  * @license     http://www.gnu.org/licenses/gpl-2.0.html GPL version 2
  * @category    Stud.IP
  *
- * @property string background_id database column
- * @property string id alias column for background_id
- * @property string filename database column
- * @property string active database column
- * @property string in_release database column
+ * @property int $id alias column for background_id
+ * @property int $background_id database column
+ * @property string $filename database column
+ * @property int $mobile database column
+ * @property int $desktop database column
+ * @property int $in_release database column
+ * @property int|null $mkdate database column
+ * @property int|null $chdate database column
  */
 class LoginBackground extends SimpleORMap
 {
diff --git a/lib/models/LtiData.php b/lib/models/LtiData.php
index 2f0a08d41a154fe505bd816f38084de5f9f3916a..3434287911eaa3f29b8901bf553969ef0a98095c 100644
--- a/lib/models/LtiData.php
+++ b/lib/models/LtiData.php
@@ -9,6 +9,20 @@
  *
  * @author      Elmar Ludwig
  * @license     http://www.gnu.org/licenses/gpl-2.0.html GPL version 2
+ *
+ * @property int $id database column
+ * @property int $position database column
+ * @property string $course_id database column
+ * @property string $title database column
+ * @property string $description database column
+ * @property int $tool_id database column
+ * @property string $launch_url database column
+ * @property int $mkdate database column
+ * @property int $chdate database column
+ * @property JSONArrayObject|null $options database column
+ * @property SimpleORMapCollection|LtiGrade[] $grades has_many LtiGrade
+ * @property Course $course belongs_to Course
+ * @property LtiTool $tool belongs_to LtiTool
  */
 
 class LtiData extends SimpleORMap
@@ -20,7 +34,7 @@ class LtiData extends SimpleORMap
     {
         $config['db_table'] = 'lti_data';
 
-        $config['serialized_fields']['options'] = 'JSONArrayObject';
+        $config['serialized_fields']['options'] = JSONArrayObject::class;
 
         $config['belongs_to']['course'] = [
             'class_name'  => Course::class,
diff --git a/lib/models/LtiGrade.php b/lib/models/LtiGrade.php
index 43fdc9a9f07328c4dee3eda760c3a4fb9fae18b2..167ea58ced412d8b2aedb2d98bc86aee62c721b8 100644
--- a/lib/models/LtiGrade.php
+++ b/lib/models/LtiGrade.php
@@ -9,6 +9,15 @@
  *
  * @author      Elmar Ludwig
  * @license     http://www.gnu.org/licenses/gpl-2.0.html GPL version 2
+ *
+ * @property array $id alias for pk
+ * @property int $link_id database column
+ * @property string $user_id database column
+ * @property float $score database column
+ * @property int $mkdate database column
+ * @property int $chdate database column
+ * @property LtiData $link belongs_to LtiData
+ * @property User $user belongs_to User
  */
 
 class LtiGrade extends SimpleORMap
diff --git a/lib/models/LtiTool.php b/lib/models/LtiTool.php
index 41b6f32199ad023e4bfe5d7131af2a45a0425f57..53be2bc81b83eaa9cd39bf67d8b7ed1ce9f8bb37 100644
--- a/lib/models/LtiTool.php
+++ b/lib/models/LtiTool.php
@@ -9,6 +9,20 @@
  *
  * @author      Elmar Ludwig
  * @license     http://www.gnu.org/licenses/gpl-2.0.html GPL version 2
+ *
+ * @property int $id database column
+ * @property string $name database column
+ * @property string $launch_url database column
+ * @property string $consumer_key database column
+ * @property string $consumer_secret database column
+ * @property string $custom_parameters database column
+ * @property int $allow_custom_url database column
+ * @property int $deep_linking database column
+ * @property int $send_lis_person database column
+ * @property int $mkdate database column
+ * @property int $chdate database column
+ * @property string $oauth_signature_method database column
+ * @property SimpleORMapCollection|LtiData[] $links has_many LtiData
  */
 
 class LtiTool extends SimpleORMap
diff --git a/lib/models/Lvgruppe.php b/lib/models/Lvgruppe.php
index 3355f77de01e2d7485bcf0e158aa2b885ec4b6f5..138d28e4d811b8dc7435528bf8b8e85b6f1ea754 100644
--- a/lib/models/Lvgruppe.php
+++ b/lib/models/Lvgruppe.php
@@ -12,6 +12,22 @@
  * @license     http://www.gnu.org/licenses/gpl-2.0.html GPL version 2
  * @category    Stud.IP
  * @since       3.5
+ *
+ * @property string $id alias column for lvgruppe_id
+ * @property string $lvgruppe_id database column
+ * @property string $name database column
+ * @property I18NString|null $alttext database column
+ * @property string $author_id database column
+ * @property string $editor_id database column
+ * @property int $mkdate database column
+ * @property int $chdate database column
+ * @property SimpleORMapCollection|Modulteil[] $modulteile has_and_belongs_to_many Modulteil
+ * @property SimpleORMapCollection|Course[] $courses has_and_belongs_to_many Course
+ * @property SimpleORMapCollection|ArchivedCourse[] $archived_courses has_and_belongs_to_many ArchivedCourse
+ * @property mixed $count_seminare additional field
+ * @property mixed $count_archiv additional field
+ * @property mixed $count_modulteile additional field
+ * @property mixed $count_semester additional field
  */
 
 class Lvgruppe extends ModuleManagementModelTreeItem
diff --git a/lib/models/LvgruppeModulteil.php b/lib/models/LvgruppeModulteil.php
index da64a4b26f93d4153ddf12784386d5e30ec89617..06dd1691c806df66dafb287d6e05f6e7270e8234 100644
--- a/lib/models/LvgruppeModulteil.php
+++ b/lib/models/LvgruppeModulteil.php
@@ -13,6 +13,19 @@
  * @license     http://www.gnu.org/licenses/gpl-2.0.html GPL version 2
  * @category    Stud.IP
  * @since       3.5
+ *
+ * @property array $id alias for pk
+ * @property string $lvgruppe_id database column
+ * @property string $modulteil_id database column
+ * @property int $position database column
+ * @property string|null $fn_id database column
+ * @property string|null $flexnow_id alias column for fn_id
+ * @property string $author_id database column
+ * @property string $editor_id database column
+ * @property int $mkdate database column
+ * @property int $chdate database column
+ * @property Lvgruppe $lvgruppe belongs_to Lvgruppe
+ * @property Modulteil $modulteil belongs_to Modulteil
  */
 
 class LvgruppeModulteil extends ModuleManagementModel
diff --git a/lib/models/LvgruppeSeminar.php b/lib/models/LvgruppeSeminar.php
index 99d6e09a640d88e60814cfa15c4345b3a83fbe59..ae6543db55eb3a9a97f5c8a2ac4337e01241e9eb 100644
--- a/lib/models/LvgruppeSeminar.php
+++ b/lib/models/LvgruppeSeminar.php
@@ -13,6 +13,16 @@
  * @license     http://www.gnu.org/licenses/gpl-2.0.html GPL version 2
  * @category    Stud.IP
  * @since       3.5
+ *
+ * @property array $id alias for pk
+ * @property string $lvgruppe_id database column
+ * @property string $seminar_id database column
+ * @property string|null $author_id database column
+ * @property string|null $editor_id database column
+ * @property int $mkdate database column
+ * @property int $chdate database column
+ * @property Lvgruppe $lvgruppe belongs_to Lvgruppe
+ * @property Course $course belongs_to Course
  */
 
 class LvgruppeSeminar extends ModuleManagementModel
diff --git a/lib/models/MailQueueEntry.class.php b/lib/models/MailQueueEntry.class.php
index 11d0a2f22841430d99fdf9f7403ce270db4fb7ef..7fe63f67ea8f828eeb5bbc79e5eeb52525b9e560 100644
--- a/lib/models/MailQueueEntry.class.php
+++ b/lib/models/MailQueueEntry.class.php
@@ -14,15 +14,16 @@
  * Use MailQueueEntry::add($mail, $message_id, $user_id) to add a mail to the queue
  * and MailQueueEntry::sendAll() or MailQueueEntry::sendNew() to flush the queue
  * and send the mails.
- * @property string mail_queue_id database column
- * @property string id alias column for mail_queue_id
- * @property string mail database column
- * @property string message_id database column
- * @property string user_id database column
- * @property string tries database column
- * @property string last_try database column
- * @property string mkdate database column
- * @property string chdate database column
+ *
+ * @property string $id alias column for mail_queue_id
+ * @property string $mail_queue_id database column
+ * @property JSONArrayObject $mail database column
+ * @property string|null $message_id database column
+ * @property string|null $user_id database column
+ * @property int $tries database column
+ * @property int $last_try database column
+ * @property int $mkdate database column
+ * @property int $chdate database column
  */
 class MailQueueEntry extends SimpleORMap
 {
@@ -30,7 +31,7 @@ class MailQueueEntry extends SimpleORMap
     {
         $config['db_table'] = 'mail_queue_entries';
 
-        $config['serialized_fields']['mail'] = 'JSONArrayObject';
+        $config['serialized_fields']['mail'] = JSONArrayObject::class;
 
         parent::configure($config);
     }
diff --git a/lib/models/Message.class.php b/lib/models/Message.class.php
index 05cfc39feb29868f9f1117cc02f58a6de960580a..e4f938b324b88ed4ae237723a393de03e6982098 100644
--- a/lib/models/Message.class.php
+++ b/lib/models/Message.class.php
@@ -11,19 +11,18 @@
  * @author    mlunzena
  * @copyright (c) Authors
  *
- * @property string message_id database column
- * @property string id alias column for message_id
- * @property string chat_id database column
- * @property string autor_id database column
- * @property string subject database column
- * @property string message database column
- * @property string mkdate database column
- * @property string readed database column
- * @property string priority database column
- * @property SimpleORMapCollection receivers has_many MessageUser
- * @property SimpleORMapCollection attachment_folder has_one Folder
- * @property User author has_one User
- * @property MessageUser originator has_one MessageUser
+ * @property string $id alias column for message_id
+ * @property string $message_id database column
+ * @property string $autor_id database column
+ * @property string $subject database column
+ * @property string $message database column
+ * @property int $show_adressees database column
+ * @property int $mkdate database column
+ * @property string $priority database column
+ * @property SimpleORMapCollection|MessageUser[] $receivers has_many MessageUser
+ * @property User $author belongs_to User
+ * @property MessageUser $originator has_one MessageUser
+ * @property Folder $attachment_folder has_one Folder
  */
 
 class Message extends SimpleORMap implements PrivacyObject
diff --git a/lib/models/MessageUser.class.php b/lib/models/MessageUser.class.php
index c8a406cd85d76c866a5cc535adbb2d8d7a6475fb..0ae6dd5cfef30412990e27fa1ff8f2a54f085d53 100644
--- a/lib/models/MessageUser.class.php
+++ b/lib/models/MessageUser.class.php
@@ -11,17 +11,16 @@
  * @author    mlunzena
  * @copyright (c) Authors
  *
- * @property string user_id database column
- * @property string message_id database column
- * @property string readed database column
- * @property string deleted database column
- * @property string snd_rec database column
- * @property string confirmed_read database column
- * @property string answered database column
- * @property string mkdate database column
- * @property string id computed column read/write
- * @property User user belongs_to User
- * @property Message message belongs_to Message
+ * @property array $id alias for pk
+ * @property string $user_id database column
+ * @property string $message_id database column
+ * @property int $readed database column
+ * @property int $deleted database column
+ * @property string $snd_rec database column
+ * @property int $answered database column
+ * @property int $mkdate database column
+ * @property User $user belongs_to User
+ * @property Message $message belongs_to Message
  */
 
 class MessageUser extends SimpleORMap implements PrivacyObject
diff --git a/lib/models/Modul.php b/lib/models/Modul.php
index 80e2753854e6de0c37e9e91eb557d98be26bd4dc..54764262d81f7be168f5487a4ee94c217d0c2a31 100644
--- a/lib/models/Modul.php
+++ b/lib/models/Modul.php
@@ -12,6 +12,49 @@
  * @license     http://www.gnu.org/licenses/gpl-2.0.html GPL version 2
  * @category    Stud.IP
  * @since       3.5
+ *
+ * @property string $id alias column for modul_id
+ * @property string $modul_id database column
+ * @property string|null $quelle database column
+ * @property string|null $variante database column
+ * @property string|null $flexnow_modul database column
+ * @property string|null $flexnow_id alias column for flexnow_modul
+ * @property string|null $code database column
+ * @property string|null $start database column
+ * @property string|null $end database column
+ * @property int|null $beschlussdatum database column
+ * @property int|null $fassung_nr database column
+ * @property string|null $fassung_typ database column
+ * @property string $version database column
+ * @property string|null $dauer database column
+ * @property string $kapazitaet database column
+ * @property float|null $kp database column
+ * @property int|null $wl_selbst database column
+ * @property int|null $wl_pruef database column
+ * @property string|null $pruef_ebene database column
+ * @property string $faktor_note database column
+ * @property string|null $stat database column
+ * @property string|null $kommentar_status database column
+ * @property string|null $verantwortlich database column
+ * @property string $author_id database column
+ * @property string $editor_id database column
+ * @property int $mkdate database column
+ * @property int $chdate database column
+ * @property SimpleORMapCollection|Modulteil[] $modulteile has_many Modulteil
+ * @property SimpleORMapCollection|ModulInst[] $assigned_institutes has_many ModulInst
+ * @property SimpleORMapCollection|MvvContactRange[] $contact_assignments has_many MvvContactRange
+ * @property SimpleORMapCollection|StgteilabschnittModul[] $abschnitte_modul has_many StgteilabschnittModul
+ * @property SimpleORMapCollection|ModulLanguage[] $languages has_many ModulLanguage
+ * @property Semester|null $start_semester belongs_to Semester
+ * @property Semester|null $end_semester belongs_to Semester
+ * @property ModulDeskriptor $deskriptoren has_one ModulDeskriptor
+ * @property Modul|null $modul_quelle has_one Modul
+ * @property Modul|null $modul_variante has_one Modul
+ * @property ModulInst $responsible_institute has_one ModulInst
+ * @property SimpleORMapCollection|StgteilAbschnitt[] $abschnitte has_and_belongs_to_many StgteilAbschnitt
+ * @property mixed $count_modulteile additional field
+ * @property mixed $languagesofinstruction additional field
+ * @property-read mixed $display_name additional field
  */
 
 class Modul extends ModuleManagementModelTreeItem
diff --git a/lib/models/ModulDeskriptor.php b/lib/models/ModulDeskriptor.php
index 330e325d0696d62e54788ce2478cad59ee4f2ab0..5a3d07152cf27d030a2179dcbb685d3dde9b4bed 100644
--- a/lib/models/ModulDeskriptor.php
+++ b/lib/models/ModulDeskriptor.php
@@ -12,6 +12,34 @@
  * @license     http://www.gnu.org/licenses/gpl-2.0.html GPL version 2
  * @category    Stud.IP
  * @since       3.5
+ *
+ * @property string $id alias column for deskriptor_id
+ * @property string $deskriptor_id database column
+ * @property string $modul_id database column
+ * @property I18NString|null $verantwortlich database column
+ * @property I18NString|null $bezeichnung database column
+ * @property I18NString|null $voraussetzung database column
+ * @property I18NString|null $kompetenzziele database column
+ * @property I18NString|null $inhalte database column
+ * @property I18NString|null $literatur database column
+ * @property I18NString|null $links database column
+ * @property I18NString|null $kommentar database column
+ * @property I18NString|null $turnus database column
+ * @property I18NString|null $kommentar_kapazitaet database column
+ * @property I18NString|null $kommentar_sws database column
+ * @property I18NString|null $kommentar_wl_selbst database column
+ * @property I18NString|null $kommentar_wl_pruef database column
+ * @property I18NString|null $kommentar_note database column
+ * @property I18NString|null $pruef_vorleistung database column
+ * @property I18NString|null $pruef_leistung database column
+ * @property I18NString|null $pruef_wiederholung database column
+ * @property I18NString|null $ersatztext database column
+ * @property string|null $author_id database column
+ * @property string|null $editor_id database column
+ * @property int $mkdate database column
+ * @property int $chdate database column
+ * @property SimpleORMapCollection|DatafieldEntryModel[] $datafields has_many DatafieldEntryModel
+ * @property Modul $modul belongs_to Modul
  */
 
 class ModulDeskriptor extends ModuleManagementModel
diff --git a/lib/models/ModulInst.php b/lib/models/ModulInst.php
index 7393bdf4856006673df9c9c6310a8b24bf340202..2c39c76e2ac5a60bbaa289b3e0767932503c3885 100644
--- a/lib/models/ModulInst.php
+++ b/lib/models/ModulInst.php
@@ -13,6 +13,18 @@
  * @license     http://www.gnu.org/licenses/gpl-2.0.html GPL version 2
  * @category    Stud.IP
  * @since       3.5
+ *
+ * @property array $id alias for pk
+ * @property string $modul_id database column
+ * @property string $institut_id database column
+ * @property string $gruppe database column
+ * @property int $position database column
+ * @property string $author_id database column
+ * @property string $editor_id database column
+ * @property int $mkdate database column
+ * @property int $chdate database column
+ * @property Fachbereich $institute belongs_to Fachbereich
+ * @property Modul $modul belongs_to Modul
  */
 
 class ModulInst extends ModuleManagementModel
diff --git a/lib/models/ModulLanguage.php b/lib/models/ModulLanguage.php
index 160a1018bb9fa6ed0f4930be4f6c41859fc5f068..e8bf1cb0d4ab6301fe174e71f3b63be7c9c1ca37 100644
--- a/lib/models/ModulLanguage.php
+++ b/lib/models/ModulLanguage.php
@@ -13,6 +13,17 @@
  * @license     http://www.gnu.org/licenses/gpl-2.0.html GPL version 2
  * @category    Stud.IP
  * @since       3.5
+ *
+ * @property array $id alias for pk
+ * @property string $modul_id database column
+ * @property string $lang database column
+ * @property string $language alias column for lang
+ * @property int $position database column
+ * @property string $author_id database column
+ * @property string $editor_id database column
+ * @property int $mkdate database column
+ * @property int $chdate database column
+ * @property Modul $modul belongs_to Modul
  */
 
 class ModulLanguage extends ModuleManagementModel
diff --git a/lib/models/Modulteil.php b/lib/models/Modulteil.php
index 14a34baa3c3cd623edc40b7f1db2f33a7821c5e4..55ef6fd91404087736c16142c4e1f7d50ab2d90f 100644
--- a/lib/models/Modulteil.php
+++ b/lib/models/Modulteil.php
@@ -12,6 +12,38 @@
  * @license     http://www.gnu.org/licenses/gpl-2.0.html GPL version 2
  * @category    Stud.IP
  * @since       3.5
+ *
+ * @property string $id alias column for modulteil_id
+ * @property string $modulteil_id database column
+ * @property string $modul_id database column
+ * @property int $position database column
+ * @property string|null $flexnow_modul database column
+ * @property string|null $nummer database column
+ * @property string|null $num_bezeichnung database column
+ * @property string|null $lernlehrform database column
+ * @property string|null $semester database column
+ * @property string|null $kapazitaet database column
+ * @property float|null $kp database column
+ * @property int|null $sws database column
+ * @property int|null $wl_praesenz database column
+ * @property int|null $wl_bereitung database column
+ * @property int|null $wl_selbst database column
+ * @property int|null $wl_pruef database column
+ * @property int|null $anteil_note database column
+ * @property int $ausgleichbar database column
+ * @property int $pflicht database column
+ * @property string $author_id database column
+ * @property string $editor_id database column
+ * @property int $mkdate database column
+ * @property int $chdate database column
+ * @property SimpleORMapCollection|ModulteilStgteilabschnitt[] $abschnitt_assignments has_many ModulteilStgteilabschnitt
+ * @property SimpleORMapCollection|LvgruppeModulteil[] $lvgruppen_assignments has_many LvgruppeModulteil
+ * @property SimpleORMapCollection|ModulteilLanguage[] $languages has_many ModulteilLanguage
+ * @property Modul $modul belongs_to Modul
+ * @property ModulteilDeskriptor $deskriptoren has_one ModulteilDeskriptor
+ * @property SimpleORMapCollection|StgteilAbschnitt[] $abschnitte has_and_belongs_to_many StgteilAbschnitt
+ * @property SimpleORMapCollection|Lvgruppe[] $lvgruppen has_and_belongs_to_many Lvgruppe
+ * @property mixed $count_lvgruppen additional field
  */
 
 class Modulteil extends ModuleManagementModelTreeItem
diff --git a/lib/models/ModulteilDeskriptor.php b/lib/models/ModulteilDeskriptor.php
index 8b1801c0064294e08b154620e59f5c0ab3ae6f3b..aa6ddf7054bd7b287a30cc347c6c85fce0c9368e 100644
--- a/lib/models/ModulteilDeskriptor.php
+++ b/lib/models/ModulteilDeskriptor.php
@@ -12,6 +12,27 @@
  * @license     http://www.gnu.org/licenses/gpl-2.0.html GPL version 2
  * @category    Stud.IP
  * @since       3.5
+ *
+ * @property string $id alias column for deskriptor_id
+ * @property string $deskriptor_id database column
+ * @property string $modulteil_id database column
+ * @property I18NString $bezeichnung database column
+ * @property I18NString|null $voraussetzung database column
+ * @property I18NString|null $kommentar database column
+ * @property I18NString|null $kommentar_kapazitaet database column
+ * @property I18NString|null $kommentar_wl_praesenz database column
+ * @property I18NString|null $kommentar_wl_bereitung database column
+ * @property I18NString|null $kommentar_wl_selbst database column
+ * @property I18NString|null $kommentar_wl_pruef database column
+ * @property I18NString|null $pruef_vorleistung database column
+ * @property I18NString|null $pruef_leistung database column
+ * @property I18NString|null $kommentar_pflicht database column
+ * @property string $author_id database column
+ * @property string $editor_id database column
+ * @property int $mkdate database column
+ * @property int $chdate database column
+ * @property SimpleORMapCollection|DatafieldEntryModel[] $datafields has_many DatafieldEntryModel
+ * @property Modulteil $modulteil belongs_to Modulteil
  */
 
 class ModulteilDeskriptor extends ModuleManagementModel
diff --git a/lib/models/ModulteilLanguage.php b/lib/models/ModulteilLanguage.php
index ed09bff3fe1bab453c9d0fd0d036bc08a4e80d8c..af510c5f0db960a7f9524b311c9af182f32a3160 100644
--- a/lib/models/ModulteilLanguage.php
+++ b/lib/models/ModulteilLanguage.php
@@ -13,6 +13,17 @@
  * @license     http://www.gnu.org/licenses/gpl-2.0.html GPL version 2
  * @category    Stud.IP
  * @since       3.5
+ *
+ * @property array $id alias for pk
+ * @property string $modulteil_id database column
+ * @property string $lang database column
+ * @property string $language alias column for lang
+ * @property int $position database column
+ * @property string $author_id database column
+ * @property string $editor_id database column
+ * @property int $mkdate database column
+ * @property int $chdate database column
+ * @property Modulteil $modulteil belongs_to Modulteil
  */
 
 class ModulteilLanguage extends ModuleManagementModel
diff --git a/lib/models/ModulteilStgteilabschnitt.php b/lib/models/ModulteilStgteilabschnitt.php
index 4f84c303b394b844f86ffe541fae18d2024b312a..d16c3a0cd03e83add80c1ef21ea28134290ada2b 100644
--- a/lib/models/ModulteilStgteilabschnitt.php
+++ b/lib/models/ModulteilStgteilabschnitt.php
@@ -13,6 +13,18 @@
  * @license     http://www.gnu.org/licenses/gpl-2.0.html GPL version 2
  * @category    Stud.IP
  * @since       3.5
+ *
+ * @property array $id alias for pk
+ * @property string $modulteil_id database column
+ * @property string $abschnitt_id database column
+ * @property int $fachsemester database column
+ * @property string $differenzierung database column
+ * @property string $author_id database column
+ * @property string $editor_id database column
+ * @property int $mkdate database column
+ * @property int $chdate database column
+ * @property Modulteil $modulteil belongs_to Modulteil
+ * @property StgteilAbschnitt $abschnitt belongs_to StgteilAbschnitt
  */
 
 class ModulteilStgteilabschnitt extends ModuleManagementModel
diff --git a/lib/models/MvvContact.php b/lib/models/MvvContact.php
index 26ff5f0e6c640bddd4995177ad8804406ce97b88..3aa72d6554698ae0f8c47fb8f7f70fe9d4ab2e12 100644
--- a/lib/models/MvvContact.php
+++ b/lib/models/MvvContact.php
@@ -11,6 +11,18 @@
  * @license     http://www.gnu.org/licenses/gpl-2.0.html GPL version 2
  * @category    Stud.IP
  * @since       4.5
+ *
+ * @property string $id alias column for contact_id
+ * @property string $contact_id database column
+ * @property string $contact_status database column
+ * @property string $alt_mail database column
+ * @property string|null $author_id database column
+ * @property string|null $editor_id database column
+ * @property int $mkdate database column
+ * @property int $chdate database column
+ * @property SimpleORMapCollection|MvvContactRange[] $ranges has_many MvvContactRange
+ * @property-read mixed $name additional field
+ * @property-read mixed $count_relations additional field
  */
 
 class MvvContact extends ModuleManagementModel
diff --git a/lib/models/MvvContactRange.php b/lib/models/MvvContactRange.php
index 85bdf6347aec1d7d55ad3c43093be44923f40390..8881e59118fe772d336e1d085ddaed68209196e1 100644
--- a/lib/models/MvvContactRange.php
+++ b/lib/models/MvvContactRange.php
@@ -12,24 +12,22 @@
  * @category    Stud.IP
  * @since       4.5
  *
- * @property string $id
- * @property string $contact_range_id
- * @property string $contact_id
- * @property string $range_id
- * @property string $range_type
- * @property string $type
- * @property string $category
- * @property int|null $position
- * @property string $author_id
- * @property string $editor_id
- * @property int $mkdate
- * @property int $chdate
- *
- * @property MvvContact $contact
- *
- * @property int $count_relations
- * @property string $name
- * @property string $contact_status
+ * @property string $id alias column for contact_range_id
+ * @property string $contact_range_id database column
+ * @property string $contact_id database column
+ * @property string $range_id database column
+ * @property string $range_type database column
+ * @property string $type database column
+ * @property string $category database column
+ * @property int|null $position database column
+ * @property string|null $author_id database column
+ * @property string|null $editor_id database column
+ * @property int $mkdate database column
+ * @property int $chdate database column
+ * @property MvvContact $contact belongs_to MvvContact
+ * @property-read mixed $count_relations additional field
+ * @property-read mixed $name additional field
+ * @property-read mixed $contact_status additional field
  */
 
 class MvvContactRange extends ModuleManagementModel
diff --git a/lib/models/MvvCourse.php b/lib/models/MvvCourse.php
index 0e82d3bcb0fca94b8cc543299b9bc3d53206ec41..78b6aeca0d4bff4d98c45a6356c44a67807f092d 100644
--- a/lib/models/MvvCourse.php
+++ b/lib/models/MvvCourse.php
@@ -12,6 +12,43 @@
  * @license     http://www.gnu.org/licenses/gpl-2.0.html GPL version 2
  * @category    Stud.IP
  * @since       3.5
+ *
+ * @property string $id alias column for seminar_id
+ * @property string $seminar_id database column
+ * @property string|null $veranstaltungsnummer database column
+ * @property string $institut_id database column
+ * @property string $name database column
+ * @property string|null $untertitel database column
+ * @property int $status database column
+ * @property string $beschreibung database column
+ * @property string|null $ort database column
+ * @property string|null $sonstiges database column
+ * @property int $lesezugriff database column
+ * @property int $schreibzugriff database column
+ * @property int|null $start_time database column
+ * @property int|null $duration_time database column
+ * @property string|null $art database column
+ * @property string|null $teilnehmer database column
+ * @property string|null $vorrausetzungen database column
+ * @property string|null $lernorga database column
+ * @property string|null $leistungsnachweis database column
+ * @property int $mkdate database column
+ * @property int $chdate database column
+ * @property string|null $ects database column
+ * @property int|null $admission_turnout database column
+ * @property int|null $admission_binding database column
+ * @property int $admission_prelim database column
+ * @property string|null $admission_prelim_txt database column
+ * @property int $admission_disable_waitlist database column
+ * @property int $visible database column
+ * @property int|null $showscore database column
+ * @property string|null $aux_lock_rule database column
+ * @property int $aux_lock_rule_forced database column
+ * @property string|null $lock_rule database column
+ * @property int $admission_waitlist_max database column
+ * @property int $admission_disable_waitlist_move database column
+ * @property int $completion database column
+ * @property string|null $parent_course database column
  */
 
 class MvvCourse extends ModuleManagementModelTreeItem
diff --git a/lib/models/MvvExternContact.php b/lib/models/MvvExternContact.php
index 855d276012c773c488b6d29a99360bc81c6ca123..504de65d9940568ffee1bf4eb1117e02e44b20ec 100644
--- a/lib/models/MvvExternContact.php
+++ b/lib/models/MvvExternContact.php
@@ -11,6 +11,19 @@
  * @license     http://www.gnu.org/licenses/gpl-2.0.html GPL version 2
  * @category    Stud.IP
  * @since       4.5
+ *
+ * @property string $id alias column for extern_contact_id
+ * @property string $extern_contact_id database column
+ * @property I18NString $name database column
+ * @property string|null $vorname database column
+ * @property I18NString $homepage database column
+ * @property string $mail database column
+ * @property string $tel database column
+ * @property string|null $author_id database column
+ * @property string|null $editor_id database column
+ * @property int $mkdate database column
+ * @property int $chdate database column
+ * @property MvvContact $MvvContact belongs_to MvvContact
  */
 
 class MvvExternContact extends ModuleManagementModel
diff --git a/lib/models/MvvFile.php b/lib/models/MvvFile.php
index 109ac2b6e4f117b41930b0184d6137d91b8fd4dc..50cd9b21a9871f414f12de95a0401f0d06c699e2 100644
--- a/lib/models/MvvFile.php
+++ b/lib/models/MvvFile.php
@@ -11,6 +11,21 @@
  * @license     http://www.gnu.org/licenses/gpl-2.0.html GPL version 2
  * @category    Stud.IP
  * @since       4.5
+ *
+ * @property string $id alias column for mvvfile_id
+ * @property string $mvvfile_id database column
+ * @property int|null $year database column
+ * @property string|null $type database column
+ * @property string|null $category database column
+ * @property string|null $tags database column
+ * @property int|null $extern_visible database column
+ * @property string|null $author_id database column
+ * @property string|null $editor_id database column
+ * @property int $mkdate database column
+ * @property int $chdate database column
+ * @property SimpleORMapCollection|MvvFileFileref[] $file_refs has_many MvvFileFileref
+ * @property SimpleORMapCollection|MvvFileRange[] $ranges has_many MvvFileRange
+ * @property-read mixed $count_relations additional field
  */
 
 class MvvFile extends ModuleManagementModel
diff --git a/lib/models/MvvFileFileref.php b/lib/models/MvvFileFileref.php
index 0771055936e5f7f4ec460b48fa51f7f0c4c12839..fe2e9e62472a0243498033b02026d34e910693ed 100644
--- a/lib/models/MvvFileFileref.php
+++ b/lib/models/MvvFileFileref.php
@@ -11,6 +11,20 @@
  * @license     http://www.gnu.org/licenses/gpl-2.0.html GPL version 2
  * @category    Stud.IP
  * @since       4.5
+ *
+ * @property array $id alias for pk
+ * @property string $mvvfile_id database column
+ * @property string $file_language database column
+ * @property string $name database column
+ * @property string $fileref_id database column
+ * @property string|null $author_id database column
+ * @property string|null $editor_id database column
+ * @property int $mkdate database column
+ * @property int $chdate database column
+ * @property MvvFile $mvv_file belongs_to MvvFile
+ * @property FileRef $file_ref belongs_to FileRef
+ * @property-read mixed $filetype additional field
+ * @property-read mixed $filename additional field
  */
 
 class MvvFileFileref extends ModuleManagementModel
diff --git a/lib/models/MvvFileRange.php b/lib/models/MvvFileRange.php
index 35e2329751d099cd34e2192351c1826eebabb349..9f0dc8d7bf8ad4f22c2c7488c47b34318cd020bb 100644
--- a/lib/models/MvvFileRange.php
+++ b/lib/models/MvvFileRange.php
@@ -11,6 +11,17 @@
  * @license     http://www.gnu.org/licenses/gpl-2.0.html GPL version 2
  * @category    Stud.IP
  * @since       4.5
+ *
+ * @property array $id alias for pk
+ * @property string $mvvfile_id database column
+ * @property string $range_id database column
+ * @property-read mixed $range_type additional field
+ * @property int|null $position database column
+ * @property string|null $author_id database column
+ * @property string|null $editor_id database column
+ * @property int $mkdate database column
+ * @property int $chdate database column
+ * @property MvvFile $mvv_file belongs_to MvvFile
  */
 
 class MvvFileRange extends ModuleManagementModel
diff --git a/lib/models/MvvOverlappingConflict.class.php b/lib/models/MvvOverlappingConflict.class.php
index a36f6bf8d93a76a1206a3a00a716e4c7097a9925..6ac8e298648079897385bc650988918a01777740 100644
--- a/lib/models/MvvOverlappingConflict.class.php
+++ b/lib/models/MvvOverlappingConflict.class.php
@@ -12,6 +12,29 @@
  * @license     http://www.gnu.org/licenses/gpl-2.0.html GPL version 2
  * @category    Stud.IP
  * @since       4.4
+ *
+ * @property int $id alias column for conflict_id
+ * @property int $conflict_id database column
+ * @property int $selection_id database column
+ * @property string $base_abschnitt_id database column
+ * @property string $base_modulteil_id database column
+ * @property string $base_course_id database column
+ * @property string $base_metadate_id database column
+ * @property string $comp_abschnitt_id database column
+ * @property string $comp_modulteil_id database column
+ * @property string $comp_course_id database column
+ * @property string $comp_metadate_id database column
+ * @property int|null $mkdate database column
+ * @property int|null $chdate database column
+ * @property MvvOverlappingSelection $selection belongs_to MvvOverlappingSelection
+ * @property StgteilAbschnitt $base_abschnitt belongs_to StgteilAbschnitt
+ * @property Modulteil $base_modulteil belongs_to Modulteil
+ * @property SeminarCycleDate $base_cycle belongs_to SeminarCycleDate
+ * @property Course $base_course belongs_to Course
+ * @property StgteilAbschnitt $comp_abschnitt belongs_to StgteilAbschnitt
+ * @property Modulteil $comp_modulteil belongs_to Modulteil
+ * @property SeminarCycleDate $comp_cycle belongs_to SeminarCycleDate
+ * @property Course $comp_course belongs_to Course
  */
 
 class MvvOverlappingConflict extends SimpleORMap
diff --git a/lib/models/MvvOverlappingExclude.php b/lib/models/MvvOverlappingExclude.php
index a940787360a00eae7d776f53c1883b68e8bb25d6..d199e3040b51a41e89f5b2c4e20cba3c76c2a0c9 100644
--- a/lib/models/MvvOverlappingExclude.php
+++ b/lib/models/MvvOverlappingExclude.php
@@ -13,6 +13,14 @@
  * @license     http://www.gnu.org/licenses/gpl-2.0.html GPL version 2
  * @category    Stud.IP
  * @since       4.4
+ *
+ * @property array $id alias for pk
+ * @property string $selection_id database column
+ * @property string $course_id database column
+ * @property int|null $mkdate database column
+ * @property int|null $chdate database column
+ * @property MvvOverlappingSelection $selection belongs_to MvvOverlappingSelection
+ * @property Course $course belongs_to Course
  */
 
 class MvvOverlappingExclude extends SimpleORMap
diff --git a/lib/models/MvvOverlappingSelection.class.php b/lib/models/MvvOverlappingSelection.class.php
index 8dc2ef08287387a1b59b34dfdb77f352f20c892c..9d159e2d6f9b6df00bf3b413a80ea14361e99c12 100644
--- a/lib/models/MvvOverlappingSelection.class.php
+++ b/lib/models/MvvOverlappingSelection.class.php
@@ -12,6 +12,23 @@
  * @license     http://www.gnu.org/licenses/gpl-2.0.html GPL version 2
  * @category    Stud.IP
  * @since       4.4
+ *
+ * @property int $id database column
+ * @property string $selection_id database column
+ * @property string $semester_id database column
+ * @property string $base_version_id database column
+ * @property string $comp_version_id database column
+ * @property string $fachsems database column
+ * @property string $semtypes database column
+ * @property string $user_id database column
+ * @property int $show_excluded database column
+ * @property int $mkdate database column
+ * @property SimpleORMapCollection|MvvOverlappingConflict[] $conflicts has_many MvvOverlappingConflict
+ * @property SimpleORMapCollection|MvvOverlappingExclude[] $excludes has_many MvvOverlappingExclude
+ * @property Semester $semester belongs_to Semester
+ * @property StgteilVersion $base_version belongs_to StgteilVersion
+ * @property StgteilVersion $comp_version belongs_to StgteilVersion
+ * @property User $user belongs_to User
  */
 
 class MvvOverlappingSelection extends SimpleORMap
diff --git a/lib/models/NewsRange.class.php b/lib/models/NewsRange.class.php
index 0bcaaa6c6c354df4474407e438eda4665e7811cf..d780b55abac6033efaaece98465c5c624f5a7b32 100644
--- a/lib/models/NewsRange.class.php
+++ b/lib/models/NewsRange.class.php
@@ -12,14 +12,16 @@
  * @license     http://www.gnu.org/licenses/gpl-2.0.html GPL version 2
  * @category    Stud.IP
  *
- * @property string news_id database column
- * @property string range_id database column
- * @property string type computed column
- * @property string name computed column
- * @property string id computed column read/write
- * @property User user belongs_to User
- * @property Course course belongs_to Course
- * @property Institute institute belongs_to Institute
+ * @property array $id alias for pk
+ * @property string $news_id database column
+ * @property string $range_id database column
+ * @property int|null $mkdate database column
+ * @property int|null $chdate database column
+ * @property User $user belongs_to User
+ * @property Course $course belongs_to Course
+ * @property Institute $institute belongs_to Institute
+ * @property mixed $type additional field
+ * @property mixed $name additional field
  */
 class NewsRange extends SimpleORMap
 {
diff --git a/lib/models/NewsRoles.class.php b/lib/models/NewsRoles.class.php
index e2de5f850016db69e73fe74875bc13db9b582be4..56da6ec6017cbabe18f6e5b4556df17f64cb8eb7 100644
--- a/lib/models/NewsRoles.class.php
+++ b/lib/models/NewsRoles.class.php
@@ -14,8 +14,10 @@
  * @package     admin
  * @since       5.1
  *
- * @property string news_id database column
- * @property int roleid database column
+ * @property array $id alias for pk
+ * @property string $news_id database column
+ * @property int $roleid database column
+ * @property StudipNews $news_ranges belongs_to StudipNews
  */
 
 class NewsRoles extends SimpleORMap
diff --git a/lib/models/OERDownloadcounter.php b/lib/models/OERDownloadcounter.php
index 4e0a68779062d5097b219c0e3b5a5dea4fb78220..c772eaaa6cc91f0cfb29396c4b47c737e446b6e9 100644
--- a/lib/models/OERDownloadcounter.php
+++ b/lib/models/OERDownloadcounter.php
@@ -1,4 +1,14 @@
 <?php
+/**
+ * @license GPL2 or any later version
+ *
+ * @property string $id alias column for counter_id
+ * @property string $counter_id database column
+ * @property string $material_id database column
+ * @property float|null $longitude database column
+ * @property float|null $latitude database column
+ * @property int|null $mkdate database column
+ */
 class OERDownloadcounter extends SimpleORMap
 {
     protected static function configure($config = [])
diff --git a/lib/models/OERHost.php b/lib/models/OERHost.php
index 6db0747c6ca23b19943e27c2f0436c9d15fa18ae..5e6d71cb773dd8cf71dab67125d7812546464819 100644
--- a/lib/models/OERHost.php
+++ b/lib/models/OERHost.php
@@ -1,5 +1,22 @@
 <?php
 
+/**
+ * @license GPL2 or any later version
+ *
+ * @property string $id alias column for host_id
+ * @property string $host_id database column
+ * @property string $sorm_class database column
+ * @property string $name database column
+ * @property string $url database column
+ * @property string $public_key database column
+ * @property string|null $private_key database column
+ * @property int $active database column
+ * @property int $index_server database column
+ * @property int $allowed_as_index_server database column
+ * @property int $last_updated database column
+ * @property int $chdate database column
+ * @property int $mkdate database column
+ */
 class OERHost extends OERIdentity
 {
 
diff --git a/lib/models/OERHostOERSI.php b/lib/models/OERHostOERSI.php
index a6c55918bfe119e9e0c4fa95063e5779e278c4b6..1b5528bea9f9319f8a46ac373c71b91f48896bdc 100644
--- a/lib/models/OERHostOERSI.php
+++ b/lib/models/OERHostOERSI.php
@@ -1,5 +1,22 @@
 <?php
 
+/**
+ * @license GPL2 or any later version
+ *
+ * @property string $id alias column for host_id
+ * @property string $host_id database column
+ * @property string $sorm_class database column
+ * @property string $name database column
+ * @property string $url database column
+ * @property string $public_key database column
+ * @property string|null $private_key database column
+ * @property int $active database column
+ * @property int $index_server database column
+ * @property int $allowed_as_index_server database column
+ * @property int $last_updated database column
+ * @property int $chdate database column
+ * @property int $mkdate database column
+ */
 class OERHostOERSI extends OERHost
 {
 
diff --git a/lib/models/OERMaterial.php b/lib/models/OERMaterial.php
index f0e101d94df3d5d9aaba0794cfbe3206b314c195..d72853faacd737539da422f473dc0e6e511b8c8c 100644
--- a/lib/models/OERMaterial.php
+++ b/lib/models/OERMaterial.php
@@ -1,37 +1,37 @@
 <?php
 
 /**
- * @property string $id
- * @property string $material_id
- * @property string|null $foreign_material_id
- * @property string|null $host_id
- * @property string $name
- * @property string $category
- * @property bool $draft
- * @property string $filename
- * @property string|null $short_description
- * @property string $description
- * @property int $difficulty_start
- * @property int $difficulty_end
- * @property string|null $player_url
- * @property string|null $tool
- * @property string $content_type
- * @property string|null $front_image_content_type
- * @property JSONArrayObject $structure
- * @property float $rating
- * @property string $license_identifier
- * @property string $uri
- * @property string $uri_hash
- * @property string|null $published_id_on_twillo
- * @property string|null $source_url
- * @property JSONArrayObject $data
- * @property int $chdate
- * @property int $mkdate
  *
- * @property OERHost $host
- * @property OERReview[]|SimpleORMapCollection $reviews
- * @property OERMaterialUser[]|SimpleORMapCollection $users
- * @property License $license
+ * @property string $id alias column for material_id
+ * @property string $material_id database column
+ * @property string|null $foreign_material_id database column
+ * @property string|null $host_id database column
+ * @property string $name database column
+ * @property string $category database column
+ * @property int $draft database column
+ * @property string $filename database column
+ * @property string|null $short_description database column
+ * @property string $description database column
+ * @property int $difficulty_start database column
+ * @property int $difficulty_end database column
+ * @property string|null $player_url database column
+ * @property string|null $tool database column
+ * @property string $content_type database column
+ * @property string|null $front_image_content_type database column
+ * @property JSONArrayObject|null $structure database column
+ * @property float|null $rating database column
+ * @property string $license_identifier database column
+ * @property string $uri database column
+ * @property string $uri_hash database column
+ * @property string|null $published_id_on_twillo database column
+ * @property string|null $source_url database column
+ * @property JSONArrayObject|null $data database column
+ * @property int $chdate database column
+ * @property int $mkdate database column
+ * @property SimpleORMapCollection|OERReview[] $reviews has_many OERReview
+ * @property SimpleORMapCollection|OERMaterialUser[] $users has_many OERMaterialUser
+ * @property OERHost|null $host belongs_to OERHost
+ * @property License $license belongs_to License
  */
 class OERMaterial extends SimpleORMap
 {
@@ -55,8 +55,8 @@ class OERMaterial extends SimpleORMap
             'class_name' => License::class,
             'foreign_key' => 'license_identifier'
         ];
-        $config['serialized_fields']['structure'] = 'JSONArrayObject';
-        $config['serialized_fields']['data'] = 'JSONArrayObject';
+        $config['serialized_fields']['structure'] = JSONArrayObject::class;
+        $config['serialized_fields']['data'] = JSONArrayObject::class;
         $config['registered_callbacks']['before_store'][] = "cbHashURI";
         $config['registered_callbacks']['before_delete'][] = "cbDeleteFile";
         parent::configure($config);
diff --git a/lib/models/OERMaterialUser.php b/lib/models/OERMaterialUser.php
index 9b4e1aa2829e11b58dd7d1952e7e92d46f0e3198..b31a7119390033d6e1796e01a8432a9ca95b50f9 100644
--- a/lib/models/OERMaterialUser.php
+++ b/lib/models/OERMaterialUser.php
@@ -1,5 +1,18 @@
 <?php
 
+/**
+ * @license GPL2 or any later version
+ *
+ * @property array $id alias for pk
+ * @property string $material_id database column
+ * @property string $user_id database column
+ * @property int $external_contact database column
+ * @property int $position database column
+ * @property int $chdate database column
+ * @property int $mkdate database column
+ * @property ExternalUser $oeruser belongs_to ExternalUser
+ * @property OERMaterial $material belongs_to OERMaterial
+ */
 class OERMaterialUser extends SimpleORMap
 {
     protected static function configure($config = [])
diff --git a/lib/models/OERPostUpload.php b/lib/models/OERPostUpload.php
index 8bf73863f6f2ec220a9146cb33bdfe86156fae50..1fab6202daa230c9986a4c270ebae3d300b152b5 100644
--- a/lib/models/OERPostUpload.php
+++ b/lib/models/OERPostUpload.php
@@ -12,11 +12,14 @@
  * @license     http://www.gnu.org/licenses/gpl-2.0.html GPL version 2
  * @category    Stud.IP
  * @since       5.3
- * @property string file_ref_id database column
- * @property string user_id database column
- * @property int reminder_date database column
- * @property string mkdate database column
- * @property string chdate database column
+ *
+ * @property array $id alias for pk
+ * @property string $file_ref_id database column
+ * @property string $user_id database column
+ * @property int|null $reminder_date database column
+ * @property int $mkdate database column
+ * @property int $chdate database column
+ * @property File $file belongs_to File
  */
 class OERPostUpload extends SimpleORMap
 {
diff --git a/lib/models/OERReview.php b/lib/models/OERReview.php
index 58a25e457f44f4781029c2fe24d2d6125a820e7c..3655c570bf5e72d8fff5a11c9def36b5373febcb 100644
--- a/lib/models/OERReview.php
+++ b/lib/models/OERReview.php
@@ -1,5 +1,28 @@
 <?php
 
+/**
+ * @license GPL2 or any later version
+ *
+ * @property string $id alias column for thread_id
+ * @property string $thread_id database column
+ * @property string $context_type database column
+ * @property string $context_id database column
+ * @property string $user_id database column
+ * @property int $external_contact database column
+ * @property string|null $content database column
+ * @property string|null $display_class database column
+ * @property int $visible_in_stream database column
+ * @property int $commentable database column
+ * @property JSONArrayObject|null $metadata database column
+ * @property int|null $chdate database column
+ * @property int|null $mkdate database column
+ * @property SimpleORMapCollection|BlubberComment[] $comments has_many BlubberComment
+ * @property SimpleORMapCollection|BlubberMention[] $mentions has_many BlubberMention
+ * @property SimpleORMapCollection|ObjectUserVisit[] $visits has_many ObjectUserVisit
+ * @property OERMaterial $material belongs_to OERMaterial
+ * @property User $user belongs_to User
+ * @property OERHost $host has_one OERHost
+ */
 class OERReview extends BlubberThread
 {
     protected static function configure($config = [])
diff --git a/lib/models/OERTag.php b/lib/models/OERTag.php
index cfefcc64725b0593cbca2acaf42117b08a88b03f..a1e496168045f9c9ec8055c21c62eb752cc6366b 100644
--- a/lib/models/OERTag.php
+++ b/lib/models/OERTag.php
@@ -1,5 +1,12 @@
 <?php
 
+/**
+ * @license GPL2 or any later version
+ *
+ * @property string $id alias column for tag_hash
+ * @property string $tag_hash database column
+ * @property string $name database column
+ */
 class OERTag extends SimpleORMap
 {
     protected static function configure($config = [])
diff --git a/lib/models/ObjectUserVisit.php b/lib/models/ObjectUserVisit.php
index 90a331e042a2a3e7f05f2664462d95901b1bf889..167ae8cb3a8137d19fd37205271c7065314541ed 100644
--- a/lib/models/ObjectUserVisit.php
+++ b/lib/models/ObjectUserVisit.php
@@ -1,13 +1,14 @@
 <?php
 
 /**
- * @property array $id
- * @property string $object_id
- * @property string $user_id
- * @property int $plugin_id
- * @property int $visitdate
- * @property int $last_visitdate
- * @property User $user
+ *
+ * @property array $id alias for pk
+ * @property string $object_id database column
+ * @property string $user_id database column
+ * @property int $plugin_id database column
+ * @property int $visitdate database column
+ * @property int $last_visitdate database column
+ * @property User $user belongs_to User
  */
 class ObjectUserVisit extends SimpleORMap
 {
diff --git a/lib/models/OpenGraphURL.class.php b/lib/models/OpenGraphURL.class.php
index 62eecc45145c4a633ef415fb1cbf9738009d1651..29e5718ff0d928d760d0b39677babae9366dc91e 100644
--- a/lib/models/OpenGraphURL.class.php
+++ b/lib/models/OpenGraphURL.class.php
@@ -12,17 +12,20 @@
  * A model class to handle the database table "opengraphdata", fetch data from
  * an Opengraph-URL and render a fitting box with the opengraph information to
  * the user.
- * @property string url database column
- * @property string id alias column for url
- * @property string is_opengraph database column
- * @property string title database column
- * @property string image database column
- * @property string description database column
- * @property string type database column
- * @property string data database column
- * @property string last_update database column
- * @property string chdate database column
- * @property string mkdate database column
+ *
+ * @property int $id alias column for opengraph_id
+ * @property int $opengraph_id database column
+ * @property string $hash database column
+ * @property string $url database column
+ * @property int|null $is_opengraph database column
+ * @property string|null $title database column
+ * @property string|null $image database column
+ * @property string|null $description database column
+ * @property string|null $type database column
+ * @property JSONArrayObject $data database column
+ * @property int $last_update database column
+ * @property int $chdate database column
+ * @property int $mkdate database column
  */
 class OpenGraphURL extends SimpleORMap
 {
@@ -37,7 +40,7 @@ class OpenGraphURL extends SimpleORMap
     {
         $config['db_table'] = 'opengraphdata';
 
-        $config['serialized_fields']['data'] = 'JSONArrayObject';
+        $config['serialized_fields']['data'] = JSONArrayObject::class;
 
         parent::configure($config);
     }
diff --git a/lib/models/PersonalNotifications.class.php b/lib/models/PersonalNotifications.class.php
index 9218bc0bb682f1a8f487606b88732da59a5615cf..efa44c16b701ace478e6ddd1c5457e24f838a2da 100644
--- a/lib/models/PersonalNotifications.class.php
+++ b/lib/models/PersonalNotifications.class.php
@@ -29,13 +29,15 @@
  * @category    Stud.IP
  * @since       2.4
  *
- * @property string personal_notification_id database column
- * @property string id alias column for personal_notification_id
- * @property string url database column
- * @property string text database column
- * @property string avatar database column
- * @property string html_id database column
- * @property string mkdate database column
+ * @property int $id alias column for personal_notification_id
+ * @property int $personal_notification_id database column
+ * @property string $url database column
+ * @property string $text database column
+ * @property string $avatar database column
+ * @property int $dialog database column
+ * @property string $html_id database column
+ * @property int $mkdate database column
+ * @property mixed $more_unseen additional field
  */
 class PersonalNotifications extends SimpleORMap
 {
diff --git a/lib/models/PersonalNotificationsUser.php b/lib/models/PersonalNotificationsUser.php
index 3363bb5b8a7bb487ea860fd23d6275421353db7d..e8f74d8b52c3784ee8b67406e40148b0451369e7 100644
--- a/lib/models/PersonalNotificationsUser.php
+++ b/lib/models/PersonalNotificationsUser.php
@@ -1,5 +1,14 @@
 <?php
 
+/**
+ * @license GPL2 or any later version
+ *
+ * @property array $id alias for pk
+ * @property int $personal_notification_id database column
+ * @property string $user_id database column
+ * @property int $seen database column
+ * @property PersonalNotifications $notification belongs_to PersonalNotifications
+ */
 class PersonalNotificationsUser extends SimpleORMap
 {
     protected static function configure($config = [])
diff --git a/lib/models/Plugin.php b/lib/models/Plugin.php
index 2030e8a3c82cb78afc1dc179de5f07c7768f46ac..7e4343a1fc7200ea271dc18aabda65484c194000 100644
--- a/lib/models/Plugin.php
+++ b/lib/models/Plugin.php
@@ -1,17 +1,22 @@
 <?php
 
 /**
- * @property int $id
- * @property int $pluginid
- * @property string $pluginclassname
- * @property string $pluginpath
- * @property string $pluginname
- * @property string $plugintype
- * @property string $enabled
- * @property int $navigationpos
- * @property int|null $dependentonid
- * @property string|null $automatic_update_url
- * @property string|null $automatic_update_secret
+ *
+ * @property int $id alias column for pluginid
+ * @property int $pluginid database column
+ * @property string $pluginclassname database column
+ * @property string $pluginpath database column
+ * @property string $pluginname database column
+ * @property string $plugintype database column
+ * @property string $enabled database column
+ * @property int $navigationpos database column
+ * @property int|null $dependentonid database column
+ * @property string|null $automatic_update_url database column
+ * @property string|null $automatic_update_secret database column
+ * @property I18NString|null $description database column
+ * @property string|null $description_mode database column
+ * @property int|null $highlight_until database column
+ * @property I18NString|null $highlight_text database column
  */
 class Plugin extends SimpleORMap
 {
diff --git a/lib/models/PluginAsset.php b/lib/models/PluginAsset.php
index dbd4c2ba94099c9296c7877cbdc11fbb66f1ab68..5f9a73d44248f36b490d94dce86cdf9ab0e95318 100644
--- a/lib/models/PluginAsset.php
+++ b/lib/models/PluginAsset.php
@@ -5,6 +5,16 @@
  * @author  Jan-Hendrik Willms <tleilax+studip@gmail.com>
  * @license GPL2 or any later version
  * @since   Stud.IP 3.4
+ *
+ * @property string $id alias column for asset_id
+ * @property string $asset_id database column
+ * @property int $plugin_id database column
+ * @property string|null $type database column
+ * @property string $filename database column
+ * @property string $storagename database column
+ * @property int|null $size database column
+ * @property int $mkdate database column
+ * @property int $chdate database column
  */
 class PluginAsset extends SimpleORMap
 {
diff --git a/lib/models/Questionnaire.php b/lib/models/Questionnaire.php
index 7a2504428794a283f110a5b1129f23cabec39f0c..f29a2de7f1b005bb19ba730913ccdd9b1fd6e62e 100644
--- a/lib/models/Questionnaire.php
+++ b/lib/models/Questionnaire.php
@@ -1,23 +1,23 @@
 <?php
 /**
- * @property string $id
- * @property string $questionnaire_id
- * @property string $title
- * @property string $description
- * @property string $user_id
- * @property int|null $startdate
- * @property int|null $stopdate
- * @property bool $visible
- * @property bool $anonymous
- * @property string $resultvisibility
- * @property bool $editanswers
- * @property bool $copyable
- * @property string $chdate
- * @property string $mkdate
  *
- * @property QuestionnaireQuestion[]|SimpleORMapCollection $questions
- * @property QuestionnaireAssignment[]|SimpleORMapCollection $assignments
- * @property QuestionnaireAnonymousAnswer[]|SimpleORMapCollection $anonymousanswers
+ * @property string $id alias column for questionnaire_id
+ * @property string $questionnaire_id database column
+ * @property string $title database column
+ * @property string|null $description database column
+ * @property string $user_id database column
+ * @property int|null $startdate database column
+ * @property int|null $stopdate database column
+ * @property int $visible database column
+ * @property int $anonymous database column
+ * @property string $resultvisibility database column
+ * @property int $editanswers database column
+ * @property int $copyable database column
+ * @property int $chdate database column
+ * @property int $mkdate database column
+ * @property SimpleORMapCollection|QuestionnaireQuestion[] $questions has_many QuestionnaireQuestion
+ * @property SimpleORMapCollection|QuestionnaireAssignment[] $assignments has_many QuestionnaireAssignment
+ * @property SimpleORMapCollection|QuestionnaireAnonymousAnswer[] $anonymousanswers has_many QuestionnaireAnonymousAnswer
  */
 class Questionnaire extends SimpleORMap implements PrivacyObject
 {
diff --git a/lib/models/QuestionnaireAnonymousAnswer.php b/lib/models/QuestionnaireAnonymousAnswer.php
index e2bf1cad081e698cea5c76b9261acd988abddd60..d72ba8f27bf2e8c48afbb82459dc8f33b954635c 100644
--- a/lib/models/QuestionnaireAnonymousAnswer.php
+++ b/lib/models/QuestionnaireAnonymousAnswer.php
@@ -1,5 +1,16 @@
 <?php
 
+/**
+ * @license GPL2 or any later version
+ *
+ * @property string $id alias column for anonymous_answer_id
+ * @property string $anonymous_answer_id database column
+ * @property string $questionnaire_id database column
+ * @property string $user_id database column
+ * @property int $chdate database column
+ * @property int $mkdate database column
+ * @property Questionnaire $questionnaire belongs_to Questionnaire
+ */
 class QuestionnaireAnonymousAnswer extends SimpleORMap implements PrivacyObject
 {
     protected static function configure($config = [])
diff --git a/lib/models/QuestionnaireAnswer.php b/lib/models/QuestionnaireAnswer.php
index 4713b7f72647a7b3c96911ae1bdc596a0eff387f..a204d86689d56fecf2849fad8232e04d7efeae6a 100644
--- a/lib/models/QuestionnaireAnswer.php
+++ b/lib/models/QuestionnaireAnswer.php
@@ -1,5 +1,18 @@
 <?php
 
+/**
+ * @license GPL2 or any later version
+ *
+ * @property string $id alias column for answer_id
+ * @property string $answer_id database column
+ * @property string $question_id database column
+ * @property string|null $user_id database column
+ * @property JSONArrayObject $answerdata database column
+ * @property int $chdate database column
+ * @property int $mkdate database column
+ * @property QuestionnaireQuestion $question belongs_to QuestionnaireQuestion
+ * @property User|null $user belongs_to User
+ */
 class QuestionnaireAnswer extends SimpleORMap implements PrivacyObject
 {
     protected static function configure($config = [])
@@ -13,7 +26,7 @@ class QuestionnaireAnswer extends SimpleORMap implements PrivacyObject
             'class_name' => User::class,
             'foreign_key' => 'user_id'
         ];
-        $config['serialized_fields']['answerdata'] = "JSONArrayObject";
+        $config['serialized_fields']['answerdata'] = JSONArrayObject::class;
 
         parent::configure($config);
     }
diff --git a/lib/models/QuestionnaireAssignment.php b/lib/models/QuestionnaireAssignment.php
index e8ef6d98479d3a5525824c09cd6e023d95dd59ff..be921f825b918dccdf35632acf05e87fec1e4440 100644
--- a/lib/models/QuestionnaireAssignment.php
+++ b/lib/models/QuestionnaireAssignment.php
@@ -1,5 +1,18 @@
 <?php
 
+/**
+ * @license GPL2 or any later version
+ *
+ * @property string $id alias column for assignment_id
+ * @property string $assignment_id database column
+ * @property string $questionnaire_id database column
+ * @property string $range_id database column
+ * @property string $range_type database column
+ * @property string $user_id database column
+ * @property int $chdate database column
+ * @property int $mkdate database column
+ * @property Questionnaire $questionnaire belongs_to Questionnaire
+ */
 class QuestionnaireAssignment extends SimpleORMap implements PrivacyObject
 {
     protected static function configure($config = [])
diff --git a/lib/models/QuestionnaireInfo.php b/lib/models/QuestionnaireInfo.php
index e68a1e6fb751c89204b362baab693ab4e7cf83c7..fc6efc7bbefed26176bb59ea7e1cb40ca5b9a883 100644
--- a/lib/models/QuestionnaireInfo.php
+++ b/lib/models/QuestionnaireInfo.php
@@ -1,4 +1,19 @@
 <?php
+/**
+ * @license GPL2 or any later version
+ *
+ * @property string $id alias column for question_id
+ * @property string $question_id database column
+ * @property string $questionnaire_id database column
+ * @property string $questiontype database column
+ * @property string|null $internal_name database column
+ * @property JSONArrayObject $questiondata database column
+ * @property int $position database column
+ * @property int $chdate database column
+ * @property int $mkdate database column
+ * @property SimpleORMapCollection|QuestionnaireAnswer[] $answers has_many QuestionnaireAnswer
+ * @property Questionnaire $questionnaire belongs_to Questionnaire
+ */
 class QuestionnaireInfo extends QuestionnaireQuestion implements QuestionType
 {
     public static function getIcon(bool $active = false) : Icon
diff --git a/lib/models/QuestionnaireQuestion.php b/lib/models/QuestionnaireQuestion.php
index 1e3734091f514d631e0bd97c9396e920586b2bd9..e5a594733bc21eba4746db57079ba73dd9212920 100644
--- a/lib/models/QuestionnaireQuestion.php
+++ b/lib/models/QuestionnaireQuestion.php
@@ -2,6 +2,21 @@
 
 use eTask\Task;
 
+/**
+ * @license GPL2 or any later version
+ *
+ * @property string $id alias column for question_id
+ * @property string $question_id database column
+ * @property string $questionnaire_id database column
+ * @property string $questiontype database column
+ * @property string|null $internal_name database column
+ * @property JSONArrayObject $questiondata database column
+ * @property int $position database column
+ * @property int $chdate database column
+ * @property int $mkdate database column
+ * @property SimpleORMapCollection|QuestionnaireAnswer[] $answers has_many QuestionnaireAnswer
+ * @property Questionnaire $questionnaire belongs_to Questionnaire
+ */
 class QuestionnaireQuestion extends SimpleORMap
 {
     protected static function configure($config = [])
@@ -17,7 +32,7 @@ class QuestionnaireQuestion extends SimpleORMap
             'on_delete' => 'delete',
             'on_store' => 'store'
         ];
-        $config['serialized_fields']['questiondata'] = 'JSONArrayObject';
+        $config['serialized_fields']['questiondata'] = JSONArrayObject::class;
         parent::configure($config);
 
     }
diff --git a/lib/models/RangeScale.php b/lib/models/RangeScale.php
index 3c89195704f006be6f2ca63b31260fd41945b62e..8d0cfaf29e7091219861a39ef1100435a380e505 100644
--- a/lib/models/RangeScale.php
+++ b/lib/models/RangeScale.php
@@ -1,6 +1,21 @@
 <?php
 require_once 'lib/classes/QuestionType.interface.php';
 
+/**
+ * @license GPL2 or any later version
+ *
+ * @property string $id alias column for question_id
+ * @property string $question_id database column
+ * @property string $questionnaire_id database column
+ * @property string $questiontype database column
+ * @property string|null $internal_name database column
+ * @property JSONArrayObject $questiondata database column
+ * @property int $position database column
+ * @property int $chdate database column
+ * @property int $mkdate database column
+ * @property SimpleORMapCollection|QuestionnaireAnswer[] $answers has_many QuestionnaireAnswer
+ * @property Questionnaire $questionnaire belongs_to Questionnaire
+ */
 class RangeScale extends QuestionnaireQuestion implements QuestionType
 {
     public static function getIcon(bool $active = false) : Icon
diff --git a/lib/models/RangeTreeNode.php b/lib/models/RangeTreeNode.php
index c142579e05d0d16aac5db8bdf8ed522dd8803e75..4c4ae0df6c67c2f336143b5914b5f6c3591ad427 100644
--- a/lib/models/RangeTreeNode.php
+++ b/lib/models/RangeTreeNode.php
@@ -15,15 +15,17 @@
  * @category    Stud.IP
  * @since       5.3
  *
- *
- * @property string id database column
- * @property string item_id database column
- * @property string parent_id database column
- * @property int level database column
- * @property int priority database column
- * @property string name database column
- * @property string studip_object database column
- * @property string studip_object_id database column
+ * @property string $id alias column for item_id
+ * @property string $item_id database column
+ * @property string $parent_id database column
+ * @property int $level database column
+ * @property int $priority database column
+ * @property string $name database column
+ * @property string|null $studip_object database column
+ * @property string|null $studip_object_id database column
+ * @property SimpleORMapCollection|RangeTreeNode[] $children has_many RangeTreeNode
+ * @property Institute|null $institute belongs_to Institute
+ * @property RangeTreeNode $parent belongs_to RangeTreeNode
  */
 class RangeTreeNode extends SimpleORMap implements StudipTreeNode
 {
diff --git a/lib/models/Semester.class.php b/lib/models/Semester.class.php
index a380781196d2347ee1ef05bf9c9c096898740750..4eefa3b886cd9424bd3ac8c7a4258cc9060e8dde 100644
--- a/lib/models/Semester.class.php
+++ b/lib/models/Semester.class.php
@@ -13,17 +13,28 @@
  * @license     http://www.gnu.org/licenses/gpl-2.0.html GPL version 2
  * @category    Stud.IP
  *
- * @property string semester_id database column
- * @property string id alias column for semester_id
- * @property string name database column
- * @property string semester_token database column
- * @property string beginn database column
- * @property string ende database column
- * @property string vorles_beginn database column
- * @property string vorles_ende database column
- * @property string first_sem_week computed column
- * @property string last_sem_week computed column
- * @property string past computed column
+ * @property string $id alias column for semester_id
+ * @property string $semester_id database column
+ * @property I18NString $name database column
+ * @property I18NString $semester_token database column
+ * @property I18NString $token alias column for semester_token
+ * @property int|null $beginn database column
+ * @property int|null $ende database column
+ * @property int|null $sem_wechsel database column
+ * @property int|null $vorles_beginn database column
+ * @property int|null $vorles_ende database column
+ * @property int $visible database column
+ * @property string|null $external_id database column
+ * @property int|null $mkdate database column
+ * @property int|null $chdate database column
+ * @property-read mixed $first_sem_week additional field
+ * @property-read mixed $last_sem_week additional field
+ * @property-read mixed $current additional field
+ * @property-read mixed $past additional field
+ * @property-read mixed $short_name additional field
+ * @property mixed $absolute_seminars_count additional field
+ * @property mixed $duration_seminars_count additional field
+ * @property mixed $continuous_seminars_count additional field
  */
 class Semester extends SimpleORMap
 {
diff --git a/lib/models/SemesterCourse.class.php b/lib/models/SemesterCourse.class.php
index 0fc6af3f5da06af0c248e30e7714514d5bd7da4e..04590e34ae40e555d909dc7b13342038fcceecf7 100644
--- a/lib/models/SemesterCourse.class.php
+++ b/lib/models/SemesterCourse.class.php
@@ -16,15 +16,13 @@
  * @license     http://www.gnu.org/licenses/gpl-2.0.html GPL version 2
  * @category    Stud.IP
  *
- * @property string semester_id The ID of a semester.
- * @property string course_id The ID of a course.
- * @property string mkdate The database entry's creation date.
- * @property string chdate The database entry's last modification date.
- *
- * @property Semester $semester
- * @property Course $course
- *
- * The combination of semester_id and course_id form the primary key.
+ * @property array $id alias for pk
+ * @property string $semester_id database column
+ * @property string $course_id database column
+ * @property int $mkdate database column
+ * @property int $chdate database column
+ * @property Semester $semester belongs_to Semester
+ * @property Course $course belongs_to Course
  */
 class SemesterCourse extends SimpleORMap
 {
diff --git a/lib/models/SemesterHoliday.class.php b/lib/models/SemesterHoliday.class.php
index ee3d2bcb1efce1fb6abf53187ca1c65ef3d3dfe7..90f9ecd3f3ff4becf70f836708060ae7dcd88cf2 100644
--- a/lib/models/SemesterHoliday.class.php
+++ b/lib/models/SemesterHoliday.class.php
@@ -12,13 +12,16 @@
  * @license     http://www.gnu.org/licenses/gpl-2.0.html GPL version 2
  * @category    Stud.IP
  *
- * @property string holiday_id database column
- * @property string id alias column for holiday_id
- * @property string semester_id database column
- * @property string name database column
- * @property string description database column
- * @property string beginn database column
- * @property string ende database column
+ * @property string $id alias column for holiday_id
+ * @property string $holiday_id database column
+ * @property string $semester_id database column
+ * @property string $name database column
+ * @property string $description database column
+ * @property int|null $beginn database column
+ * @property int $ende database column
+ * @property int|null $mkdate database column
+ * @property int|null $chdate database column
+ * @property mixed $current additional field
  */
 
 class SemesterHoliday extends SimpleORMap
diff --git a/lib/models/SeminarCycleDate.class.php b/lib/models/SeminarCycleDate.class.php
index 50f7105e764a4bd4ad117f825f0f37acd85fc35b..36884f04b72c648bc4d690affab68a25e34addb6 100644
--- a/lib/models/SeminarCycleDate.class.php
+++ b/lib/models/SeminarCycleDate.class.php
@@ -18,28 +18,30 @@ require_once 'lib/dates.inc.php';
  * @license     http://www.gnu.org/licenses/gpl-2.0.html GPL version 2
  * @category    Stud.IP
  * @since       2.0
- * @property string                metadate_id  database column
- * @property string                id           alias column for metadate_id
- * @property string                seminar_id   database column
- * @property string                start_time   database column
- * @property string                end_time     database column
- * @property string                weekday      database column
- * @property string                description  database column
- * @property string                sws          database column
- * @property string                cycle        database column
- * @property string                week_offset  database column
- * @property string                end_offset   database column
- * @property string                sorter       database column
- * @property string                mkdate       database column
- * @property string                chdate       database column
- * @property string                start_hour   computed column read/write
- * @property string                start_minute computed column read/write
- * @property string                end_hour     computed column read/write
- * @property string                end_minute   computed column read/write
- * @property SimpleORMapCollection dates        has_many CourseDate
- * @property Course                course       belongs_to Course
- * @property RoomRequest           room_requests has_many RoomRequest
- * @property bool                  is_visible   computed column read
+ *
+ * @property string $id alias column for metadate_id
+ * @property string $metadate_id database column
+ * @property string $seminar_id database column
+ * @property string $start_time database column
+ * @property string $end_time database column
+ * @property int $weekday database column
+ * @property string $description database column
+ * @property float $sws database column
+ * @property int $cycle database column
+ * @property int $week_offset database column
+ * @property int|null $end_offset database column
+ * @property int $sorter database column
+ * @property int $mkdate database column
+ * @property int $chdate database column
+ * @property SimpleORMapCollection|RoomRequest[] $room_requests has_many RoomRequest
+ * @property SimpleORMapCollection|CourseDate[] $dates has_many CourseDate
+ * @property SimpleORMapCollection|CourseExDate[] $exdates has_many CourseExDate
+ * @property Course $course belongs_to Course
+ * @property mixed $start_hour additional field
+ * @property mixed $start_minute additional field
+ * @property mixed $end_hour additional field
+ * @property mixed $end_minute additional field
+ * @property-read mixed $is_visible additional field
  */
 class SeminarCycleDate extends SimpleORMap
 {
diff --git a/lib/models/StatusgruppeUser.php b/lib/models/StatusgruppeUser.php
index 44fda262672ec805821cc2bddad4a1cac7f717d3..7bd3133cc05e5b7fbdd46ccc942930300255ed58 100644
--- a/lib/models/StatusgruppeUser.php
+++ b/lib/models/StatusgruppeUser.php
@@ -15,14 +15,22 @@
  * @license     http://www.gnu.org/licenses/gpl-2.0.html GPL version 2
  * @category    Stud.IP
  *
- * @property string statusgruppe_id database column
- * @property string user_id database column
- * @property string position database column
- * @property string visible database column
- * @property string inherit database column
- * @property string id computed column read/write
- * @property Statusgruppen group belongs_to Statusgruppen
- * @property User user belongs_to User
+ * @property array $id alias for pk
+ * @property string $statusgruppe_id database column
+ * @property string $user_id database column
+ * @property int $position database column
+ * @property int $visible database column
+ * @property int $inherit database column
+ * @property int|null $mkdate database column
+ * @property SimpleORMapCollection|DatafieldEntryModel[] $datafields has_many DatafieldEntryModel
+ * @property Statusgruppen $group belongs_to Statusgruppen
+ * @property User $user belongs_to User
+ * @property mixed $vorname additional field
+ * @property mixed $nachname additional field
+ * @property mixed $username additional field
+ * @property mixed $email additional field
+ * @property mixed $title_front additional field
+ * @property mixed $title_rear additional field
  */
 class StatusgruppeUser extends SimpleORMap implements PrivacyObject
 {
diff --git a/lib/models/Statusgruppen.php b/lib/models/Statusgruppen.php
index ebf8e133f0079d79e6bf5829e71db9fc99017571..5775abd01d187af930c33a12883848e6168f5811 100644
--- a/lib/models/Statusgruppen.php
+++ b/lib/models/Statusgruppen.php
@@ -17,28 +17,31 @@
  * @license     http://www.gnu.org/licenses/gpl-2.0.html GPL version 2
  * @category    Stud.IP
  *
- * @property string statusgruppe_id database column
- * @property string id alias column for statusgruppe_id
- * @property string name database column
- * @property string range_id database column
- * @property string position database column
- * @property string size database column
- * @property string selfassign database column
- * @property string selfassign_start database column
- * @property string mkdate database column
- * @property string chdate database column
- * @property string calendar_group database column
- * @property string name_w database column
- * @property string name_m database column
- * @property string children computed column
- * @property SimpleORMapCollection members has_many StatusgruppeUser
- * @property Statusgruppen parent belongs_to Statusgruppen
- * @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
+ * @property string $id alias column for statusgruppe_id
+ * @property string $statusgruppe_id database column
+ * @property I18NString $name database column
+ * @property string|null $description database column
+ * @property string $range_id database column
+ * @property int $position database column
+ * @property int $size database column
+ * @property int $selfassign database column
+ * @property int $selfassign_start database column
+ * @property int $selfassign_end database column
+ * @property int $mkdate database column
+ * @property int $chdate database column
+ * @property int $calendar_group database column
+ * @property I18NString|null $name_w database column
+ * @property I18NString|null $name_m database column
+ * @property SimpleORMapCollection|StatusgruppeUser[] $members has_many StatusgruppeUser
+ * @property SimpleORMapCollection|ConsultationBlock[] $consultation_blocks has_many ConsultationBlock
+ * @property SimpleORMapCollection|ConsultationResponsibility[] $consultation_responsibilities has_many ConsultationResponsibility
+ * @property Statusgruppen $parent belongs_to Statusgruppen
+ * @property Course $course belongs_to Course
+ * @property Institute $institute belongs_to Institute
+ * @property User $user belongs_to User
+ * @property BlubberStatusgruppeThread $blubberthread has_one BlubberStatusgruppeThread
+ * @property SimpleORMapCollection|CourseDate[] $dates has_and_belongs_to_many CourseDate
+ * @property mixed $children additional field
  */
 class Statusgruppen extends SimpleORMap implements PrivacyObject
 {
diff --git a/lib/models/StgteilAbschnitt.php b/lib/models/StgteilAbschnitt.php
index 6e758a505516b7698fd83331dc6b2b924ad818ad..75a6cc8a58375110f20413ffb382d5dc501a5d09 100644
--- a/lib/models/StgteilAbschnitt.php
+++ b/lib/models/StgteilAbschnitt.php
@@ -12,6 +12,24 @@
  * @license     http://www.gnu.org/licenses/gpl-2.0.html GPL version 2
  * @category    Stud.IP
  * @since       3.5
+ *
+ * @property string $id alias column for abschnitt_id
+ * @property string $abschnitt_id database column
+ * @property string $version_id database column
+ * @property int $position database column
+ * @property I18NString $name database column
+ * @property I18NString|null $kommentar database column
+ * @property float|null $kp database column
+ * @property I18NString|null $ueberschrift database column
+ * @property string $author_id database column
+ * @property string $editor_id database column
+ * @property int $mkdate database column
+ * @property int $chdate database column
+ * @property SimpleORMapCollection|StgteilabschnittModul[] $modul_zuordnungen has_many StgteilabschnittModul
+ * @property SimpleORMapCollection|ModulteilStgteilabschnitt[] $modulteil_abschnitte has_many ModulteilStgteilabschnitt
+ * @property StgteilVersion $version belongs_to StgteilVersion
+ * @property SimpleORMapCollection|Modul[] $module has_and_belongs_to_many Modul
+ * @property mixed $count_module additional field
  */
 
 class StgteilAbschnitt extends ModuleManagementModelTreeItem
diff --git a/lib/models/StgteilBezeichnung.php b/lib/models/StgteilBezeichnung.php
index 926e6ab81b9995fdb6ca6ef57bf5c795934fb795..ba6ddd9053ccf550432c61895b79f03ca6868110 100644
--- a/lib/models/StgteilBezeichnung.php
+++ b/lib/models/StgteilBezeichnung.php
@@ -12,6 +12,18 @@
  * @license     http://www.gnu.org/licenses/gpl-2.0.html GPL version 2
  * @category    Stud.IP
  * @since       3.5
+ *
+ * @property string $id alias column for stgteil_bez_id
+ * @property string $stgteil_bez_id database column
+ * @property I18NString $name database column
+ * @property I18NString $name_kurz database column
+ * @property int $position database column
+ * @property string $author_id database column
+ * @property string $editor_id database column
+ * @property int $mkdate database column
+ * @property int $chdate database column
+ * @property mixed $count_stgteile additional field
+ * @property mixed $count_studiengaenge additional field
  */
 
 class StgteilBezeichnung extends ModuleManagementModel
diff --git a/lib/models/StgteilVersion.php b/lib/models/StgteilVersion.php
index 7d7137470979d0967c8e7f74eb39647f63f70526..b2b56e262c751ac13be7f42b07594dc3204c31b4 100644
--- a/lib/models/StgteilVersion.php
+++ b/lib/models/StgteilVersion.php
@@ -12,6 +12,29 @@
  * @license     http://www.gnu.org/licenses/gpl-2.0.html GPL version 2
  * @category    Stud.IP
  * @since       3.5
+ *
+ * @property string $id alias column for version_id
+ * @property string $version_id database column
+ * @property string $stgteil_id database column
+ * @property string|null $start_sem database column
+ * @property string|null $end_sem database column
+ * @property string|null $code database column
+ * @property int|null $beschlussdatum database column
+ * @property int|null $fassung_nr database column
+ * @property string|null $fassung_typ database column
+ * @property I18NString|null $beschreibung database column
+ * @property string|null $stat database column
+ * @property string|null $kommentar_status database column
+ * @property string $author_id database column
+ * @property string $editor_id database column
+ * @property int $mkdate database column
+ * @property int $chdate database column
+ * @property SimpleORMapCollection|StgteilAbschnitt[] $abschnitte has_many StgteilAbschnitt
+ * @property SimpleORMapCollection|MvvFile[] $documents has_many MvvFile
+ * @property SimpleORMapCollection|MvvFile[] $document_assignments has_many MvvFile
+ * @property StudiengangTeil $studiengangteil belongs_to StudiengangTeil
+ * @property-read mixed $count_abschnitte additional field
+ * @property-read mixed $count_dokumente additional field
  */
 
 class StgteilVersion extends ModuleManagementModelTreeItem
diff --git a/lib/models/StgteilabschnittModul.php b/lib/models/StgteilabschnittModul.php
index 020c0deedec8d0bd0439fbbbfe740b86d3ca70c5..6b2f01f7c90fd5501d3540ec1b3e2945e111c7e5 100644
--- a/lib/models/StgteilabschnittModul.php
+++ b/lib/models/StgteilabschnittModul.php
@@ -13,6 +13,21 @@
  * @license     http://www.gnu.org/licenses/gpl-2.0.html GPL version 2
  * @category    Stud.IP
  * @since       3.5
+ *
+ * @property string $id alias column for abschnitt_modul_id
+ * @property string $abschnitt_modul_id database column
+ * @property string $abschnitt_id database column
+ * @property string $modul_id database column
+ * @property string|null $flexnow_modul database column
+ * @property string|null $modulcode database column
+ * @property int $position database column
+ * @property I18NString|null $bezeichnung database column
+ * @property string $author_id database column
+ * @property string $editor_id database column
+ * @property int $mkdate database column
+ * @property int $chdate database column
+ * @property Modul $modul belongs_to Modul
+ * @property StgteilAbschnitt $abschnitt belongs_to StgteilAbschnitt
  */
 
 class StgteilabschnittModul extends ModuleManagementModelTreeItem
diff --git a/lib/models/StockImage.php b/lib/models/StockImage.php
index 54d09921d0b8ef6b9206409fe6a714f10f448a39..0885536629fbf7aa4317560b3875eff1fcfe7253 100644
--- a/lib/models/StockImage.php
+++ b/lib/models/StockImage.php
@@ -1,19 +1,20 @@
 <?php
 
 /**
- * @property string $id          database column
- * @property string $title       database column
+ *
+ * @property int $id database column
+ * @property string $title database column
  * @property string $description database column
- * @property string $license     database column
- * @property string $author      database column
- * @property string $mime_type   database column
- * @property int    $size        database column
- * @property int    $width       database column
- * @property int    $height      database column
- * @property string $palette     database column
- * @property string $tags     database column
- * @property int    $mkdate      database column
- * @property int    $chdate      database column
+ * @property string $license database column
+ * @property string $author database column
+ * @property string $mime_type database column
+ * @property int $size database column
+ * @property int $width database column
+ * @property int $height database column
+ * @property string $palette database column
+ * @property string $tags database column
+ * @property int $mkdate database column
+ * @property int $chdate database column
  */
 class StockImage extends \SimpleORMap
 {
diff --git a/lib/models/Studiengang.php b/lib/models/Studiengang.php
index eccd0cd4f853b84db4669a38f866234ac1c11d89..9c9be779b708a3e35363e469ea98fb459f4204f9 100644
--- a/lib/models/Studiengang.php
+++ b/lib/models/Studiengang.php
@@ -12,6 +12,50 @@
  * @license     http://www.gnu.org/licenses/gpl-2.0.html GPL version 2
  * @category    Stud.IP
  * @since       3.5
+ *
+ * @property string $id alias column for studiengang_id
+ * @property string $studiengang_id database column
+ * @property string|null $abschluss_id database column
+ * @property string $typ database column
+ * @property I18NString $name database column
+ * @property I18NString|null $name_kurz database column
+ * @property I18NString|null $beschreibung database column
+ * @property string|null $institut_id database column
+ * @property string|null $start database column
+ * @property string|null $end database column
+ * @property int|null $beschlussdatum database column
+ * @property int|null $fassung_nr database column
+ * @property string|null $fassung_typ database column
+ * @property string|null $stat database column
+ * @property string|null $kommentar_status database column
+ * @property string|null $schlagworte database column
+ * @property int|null $studienzeit database column
+ * @property int|null $studienplaetze database column
+ * @property string|null $abschlussgrad database column
+ * @property string|null $enroll database column
+ * @property string $author_id database column
+ * @property string $editor_id database column
+ * @property int $mkdate database column
+ * @property int $chdate database column
+ * @property SimpleORMapCollection|StudiengangStgteil[] $stgteil_assignments has_many StudiengangStgteil
+ * @property SimpleORMapCollection|MvvFile[] $documents has_many MvvFile
+ * @property SimpleORMapCollection|MvvFileRange[] $document_assignments has_many MvvFileRange
+ * @property SimpleORMapCollection|MvvContactRange[] $contact_assignments has_many MvvContactRange
+ * @property SimpleORMapCollection|StudycourseType[] $studycourse_types has_many StudycourseType
+ * @property SimpleORMapCollection|StudycourseLanguage[] $languages has_many StudycourseLanguage
+ * @property SimpleORMapCollection|DatafieldEntryModel[] $datafields has_many DatafieldEntryModel
+ * @property SimpleORMapCollection|Aufbaustudiengang[] $grundstg_assignments has_many Aufbaustudiengang
+ * @property SimpleORMapCollection|Aufbaustudiengang[] $aufbaustg_assignments has_many Aufbaustudiengang
+ * @property Abschluss|null $abschluss belongs_to Abschluss
+ * @property Fachbereich|null $responsible_institute has_one Fachbereich
+ * @property SimpleORMapCollection|StudiengangTeil[] $studiengangteile has_and_belongs_to_many StudiengangTeil
+ * @property SimpleORMapCollection|StgteilBezeichnung[] $stgteil_bezeichnungen has_and_belongs_to_many StgteilBezeichnung
+ * @property-read mixed $count_dokumente additional field
+ * @property-read mixed $count_faecher additional field
+ * @property-read mixed $count_module additional field
+ * @property-read mixed $institut_name additional field
+ * @property-read mixed $kategorie_name additional field
+ * @property-read mixed $display_name additional field
  */
 
 class Studiengang extends ModuleManagementModelTreeItem
diff --git a/lib/models/StudiengangStgteil.php b/lib/models/StudiengangStgteil.php
index 99140220fffe7376d24fc3cb26d4576d02ab0ef7..b37cd538e530fe3936f12e2b400df43b5f278dbc 100644
--- a/lib/models/StudiengangStgteil.php
+++ b/lib/models/StudiengangStgteil.php
@@ -13,6 +13,22 @@
  * @license     http://www.gnu.org/licenses/gpl-2.0.html GPL version 2
  * @category    Stud.IP
  * @since       3.5
+ *
+ * @property array $id alias for pk
+ * @property string $studiengang_id database column
+ * @property string $stgteil_id database column
+ * @property string $stgteil_bez_id database column
+ * @property int $position database column
+ * @property string $author_id database column
+ * @property string $editor_id database column
+ * @property int $mkdate database column
+ * @property int $chdate database column
+ * @property Studiengang $studiengang belongs_to Studiengang
+ * @property StudiengangTeil $studiengangteil belongs_to StudiengangTeil
+ * @property StgteilBezeichnung $stgteil_bezeichnung has_one StgteilBezeichnung
+ * @property-read mixed $stgteil_name additional field
+ * @property-read mixed $stgbez_id additional field
+ * @property-read mixed $stgbez_name additional field
  */
 
 class StudiengangStgteil extends ModuleManagementModel
diff --git a/lib/models/StudiengangTeil.php b/lib/models/StudiengangTeil.php
index 0d73c3d8bb239a24d1c2fc594be65ffdce9e4148..9292dd9b1b9909a0c382a9763f6ddc77cb1035a5 100644
--- a/lib/models/StudiengangTeil.php
+++ b/lib/models/StudiengangTeil.php
@@ -12,6 +12,26 @@
  * @license     http://www.gnu.org/licenses/gpl-2.0.html GPL version 2
  * @category    Stud.IP
  * @since       3.5
+ *
+ * @property string $id alias column for stgteil_id
+ * @property string $stgteil_id database column
+ * @property string|null $fach_id database column
+ * @property string|null $kp database column
+ * @property int|null $semester database column
+ * @property I18NString $zusatz database column
+ * @property string $author_id database column
+ * @property string $editor_id database column
+ * @property int $mkdate database column
+ * @property int $chdate database column
+ * @property SimpleORMapCollection|StgteilVersion[] $versionen has_many StgteilVersion
+ * @property SimpleORMapCollection|MvvContactRange[] $contact_assignments has_many MvvContactRange
+ * @property SimpleORMapCollection|StudiengangStgteil[] $studiengang_assignments has_many StudiengangStgteil
+ * @property Fach|null $fach belongs_to Fach
+ * @property SimpleORMapCollection|Studiengang[] $studiengang has_and_belongs_to_many Studiengang
+ * @property-read mixed $count_versionen additional field
+ * @property-read mixed $fach_name additional field
+ * @property-read mixed $count_contacts additional field
+ * @property-read mixed $stgteil_name additional field
  */
 
 class StudiengangTeil extends ModuleManagementModelTreeItem
diff --git a/lib/models/StudipCacheOperation.php b/lib/models/StudipCacheOperation.php
index 938a75a5da0eac60482d4e9c509a626a0d5d40a2..e9c8738371e9d9cb2f583fd6f4085ddbb18d0140 100644
--- a/lib/models/StudipCacheOperation.php
+++ b/lib/models/StudipCacheOperation.php
@@ -11,6 +11,13 @@
  * @author  Jan-Hendrik Willms <tleilax+studip@gmail.com>
  * @license GPL2 or any later version
  * @since   Stud.IP 3.3
+ *
+ * @property array $id alias for pk
+ * @property string $cache_key database column
+ * @property string $operation database column
+ * @property string $parameters database column
+ * @property int $mkdate database column
+ * @property int $chdate database column
  */
 class StudipCacheOperation extends SimpleORMap
 {
diff --git a/lib/models/StudipComment.class.php b/lib/models/StudipComment.class.php
index 226daab8b180fac3b2884622f31b4bcd6c3c07fa..2e0389d53108b42cf757ea0d3d2f8bfa98b16b53 100644
--- a/lib/models/StudipComment.class.php
+++ b/lib/models/StudipComment.class.php
@@ -31,14 +31,14 @@
  * @author   André Noack <noack@data-quest>, Suchi & Berg GmbH <info@data-quest.de>
  * @access   public
  *
- * @property string comment_id database column
- * @property string id alias column for comment_id
- * @property string object_id database column
- * @property string user_id database column
- * @property string content database column
- * @property string mkdate database column
- * @property string chdate database column
- * @property StudipNews news belongs_to StudipNews
+ * @property string $id alias column for comment_id
+ * @property string $comment_id database column
+ * @property string $object_id database column
+ * @property string $user_id database column
+ * @property string $content database column
+ * @property int $mkdate database column
+ * @property int $chdate database column
+ * @property StudipNews $news belongs_to StudipNews
  */
 
 class StudipComment extends SimpleORMap implements PrivacyObject
diff --git a/lib/models/StudipEvaluation.php b/lib/models/StudipEvaluation.php
index 58a8f53bfbb928d70d97b32335013aed3d60767e..5441db82f51489771368a0c393d221582dc83323 100644
--- a/lib/models/StudipEvaluation.php
+++ b/lib/models/StudipEvaluation.php
@@ -13,22 +13,23 @@
  * @license     http://www.gnu.org/licenses/gpl-2.0.html GPL version 2
  * @category    Stud.IP
  * @since       3.0
- * @property string eval_id database column
- * @property string id alias column for eval_id
- * @property string author_id database column
- * @property string title database column
- * @property string text database column
- * @property string startdate database column
- * @property string stopdate database column
- * @property string timespan database column
- * @property string mkdate database column
- * @property string chdate database column
- * @property string anonymous database column
- * @property string visible database column
- * @property string shared database column
- * @property string enddate computed column
- * @property User author belongs_to User
- * @property SimpleORMapCollection participants has_and_belongs_to_many User
+ *
+ * @property string $id alias column for eval_id
+ * @property string $eval_id database column
+ * @property string $author_id database column
+ * @property string $title database column
+ * @property string $text database column
+ * @property int|null $startdate database column
+ * @property int|null $stopdate database column
+ * @property int|null $timespan database column
+ * @property int $mkdate database column
+ * @property int $chdate database column
+ * @property int $anonymous database column
+ * @property int $visible database column
+ * @property int $shared database column
+ * @property User $author belongs_to User
+ * @property SimpleORMapCollection|User[] $participants has_and_belongs_to_many User
+ * @property mixed $enddate additional field
  */
 class StudipEvaluation extends SimpleORMap
 {
diff --git a/lib/models/StudipNews.class.php b/lib/models/StudipNews.class.php
index 57e42bf8625715d5ff7e6d7facb47ea1a9431b93..f909fb4cd5cf6d37593bdc35a434ae7112014485 100644
--- a/lib/models/StudipNews.class.php
+++ b/lib/models/StudipNews.class.php
@@ -27,22 +27,23 @@ require_once 'lib/object.inc.php';
  * @author   Arne Schröder <schroeder@data-quest>
  * @access   public
  *
- * @property string news_id database column
- * @property string id alias column for news_id
- * @property string topic database column
- * @property string body database column
- * @property string author database column
- * @property string date database column
- * @property string user_id database column
- * @property string expire database column
- * @property string allow_comments database column
- * @property int prio database column
- * @property string chdate database column
- * @property string chdate_uid database column
- * @property string mkdate database column
- * @property SimpleORMapCollection news_ranges has_many NewsRange
- * @property SimpleORMapCollection comments has_many StudipComment
- * @property User owner belongs_to User
+ * @property string $id alias column for news_id
+ * @property string $news_id database column
+ * @property I18NString $topic database column
+ * @property I18NString $body database column
+ * @property string $author database column
+ * @property int $date database column
+ * @property string $user_id database column
+ * @property int $expire database column
+ * @property int $allow_comments database column
+ * @property int $prio database column
+ * @property int $chdate database column
+ * @property string $chdate_uid database column
+ * @property int $mkdate database column
+ * @property SimpleORMapCollection|NewsRange[] $news_ranges has_many NewsRange
+ * @property SimpleORMapCollection|StudipComment[] $comments has_many StudipComment
+ * @property SimpleORMapCollection|NewsRoles[] $news_roles has_many NewsRoles
+ * @property User $owner belongs_to User
  */
 class StudipNews extends SimpleORMap implements PrivacyObject
 {
diff --git a/lib/models/StudipScmEntry.class.php b/lib/models/StudipScmEntry.class.php
index 2eeff5a8650add03420e7c7327e363330eb77a96..7001a4a29ad7c30c90fb69db8d8f9200f215f025 100644
--- a/lib/models/StudipScmEntry.class.php
+++ b/lib/models/StudipScmEntry.class.php
@@ -10,17 +10,17 @@
  * @author André Noack <noack@data-quest>, Suchi & Berg GmbH <info@data-quest.de>
  * @author Jan-Hendrik Willms <tleilax+studip@gmail.com>
  *
- * @property string scm_id database column
- * @property string id alias column for scm_id
- * @property string range_id database column
- * @property string user_id database column
- * @property string tab_name database column
- * @property string content database column
- * @property string mkdate database column
- * @property string chdate database column
- * @property string position database column
- * @property User user belongs_to User
- * @property Course course belongs_to Course
+ * @property string $id alias column for scm_id
+ * @property string $scm_id database column
+ * @property string $range_id database column
+ * @property string $user_id database column
+ * @property I18NString $tab_name database column
+ * @property I18NString $content database column
+ * @property int $mkdate database column
+ * @property int $chdate database column
+ * @property int $position database column
+ * @property User $user belongs_to User
+ * @property Course $course belongs_to Course
  */
 
 class StudipScmEntry extends SimpleORMap
diff --git a/lib/models/StudipStudyArea.class.php b/lib/models/StudipStudyArea.class.php
index 518e6c1dcfa41e9b21b08666a87a971a4dc51ba9..444ca21291237d152b8aa2e2824c2f96675732c5 100644
--- a/lib/models/StudipStudyArea.class.php
+++ b/lib/models/StudipStudyArea.class.php
@@ -15,17 +15,19 @@
  * @author    André Noack <noack@data-quest.de>
  * @copyright (c) Authors
  *
- * @property string sem_tree_id database column
- * @property string id alias column for sem_tree_id
- * @property string parent_id database column
- * @property string priority database column
- * @property string info database column
- * @property string name database column
- * @property string type database column
- * @property SimpleORMapCollection _children has_many StudipStudyArea
- * @property Institute institute belongs_to Institute
- * @property StudipStudyArea _parent belongs_to StudipStudyArea
- * @property SimpleORMapCollection courses has_and_belongs_to_many Course
+ * @property string $id alias column for sem_tree_id
+ * @property string $sem_tree_id database column
+ * @property string $parent_id database column
+ * @property int $priority database column
+ * @property string $info database column
+ * @property string $name database column
+ * @property string|null $studip_object_id database column
+ * @property int $type database column
+ * @property int|null $mkdate database column
+ * @property int|null $chdate database column
+ * @property SimpleORMapCollection|StudipStudyArea[] $_children has_many StudipStudyArea
+ * @property StudipStudyArea $_parent belongs_to StudipStudyArea
+ * @property SimpleORMapCollection|Course[] $courses has_and_belongs_to_many Course
  */
 
 class StudipStudyArea extends SimpleORMap implements StudipTreeNode
diff --git a/lib/models/StudyCourse.class.php b/lib/models/StudyCourse.class.php
index a99e1cd33183e802f8a878721b653cce1ad09800..faf6df46ff7241193487c284755fc3a0f8ea935d 100644
--- a/lib/models/StudyCourse.class.php
+++ b/lib/models/StudyCourse.class.php
@@ -13,12 +13,18 @@
  * @license     http://www.gnu.org/licenses/gpl-2.0.html GPL version 2
  * @category    Stud.IP
  *
- * @property string studiengang_id database column
- * @property string id alias column for studiengang_id
- * @property string name database column
- * @property string beschreibung database column
- * @property string mkdate database column
- * @property string chdate database column
+ * @property string $id alias column for fach_id
+ * @property string $fach_id database column
+ * @property string $name database column
+ * @property string|null $name_kurz database column
+ * @property string|null $beschreibung database column
+ * @property string|null $schlagworte database column
+ * @property string $author_id database column
+ * @property string $editor_id database column
+ * @property int $mkdate database column
+ * @property int $chdate database column
+ * @property SimpleORMapCollection|Degree[] $degrees has_and_belongs_to_many Degree
+ * @property-read mixed $count_user additional field
  */
 class StudyCourse extends SimpleORMap
 {
diff --git a/lib/models/StudycourseLanguage.php b/lib/models/StudycourseLanguage.php
index 22747b31e647163e44d60cf4b1cde9fbdd188600..3e1a860611250dc965a67f1c4d3c04546f0d5b0d 100644
--- a/lib/models/StudycourseLanguage.php
+++ b/lib/models/StudycourseLanguage.php
@@ -13,6 +13,18 @@
  * @license     http://www.gnu.org/licenses/gpl-2.0.html GPL version 2
  * @category    Stud.IP
  * @since       4.5
+ *
+ * @property array $id alias for pk
+ * @property string $studiengang_id database column
+ * @property string $lang database column
+ * @property string $language alias column for lang
+ * @property int $position database column
+ * @property string|null $author_id database column
+ * @property string|null $editor_id database column
+ * @property int $mkdate database column
+ * @property int $chdate database column
+ * @property Studiengang $studycourse belongs_to Studiengang
+ * @property-read mixed $display_name additional field
  */
 
 class StudycourseLanguage extends ModuleManagementModel
diff --git a/lib/models/StudycourseType.php b/lib/models/StudycourseType.php
index ad2ee68461789a2368fcb96f8f007afa54f28128..07367eb5b22ebf69a5b97cbf6124ecaff4d42dde 100644
--- a/lib/models/StudycourseType.php
+++ b/lib/models/StudycourseType.php
@@ -13,6 +13,15 @@
  * @license     http://www.gnu.org/licenses/gpl-2.0.html GPL version 2
  * @category    Stud.IP
  * @since       4.4
+ *
+ * @property array $id alias for pk
+ * @property string $studiengang_id database column
+ * @property string $type database column
+ * @property string|null $author_id database column
+ * @property string|null $editor_id database column
+ * @property int $mkdate database column
+ * @property int $chdate database column
+ * @property Studiengang $studycourse belongs_to Studiengang
  */
 
 class StudycourseType extends ModuleManagementModel
diff --git a/lib/models/TFASecret.php b/lib/models/TFASecret.php
index 6d14c8157abd83a34853d0cbc2a5ba7cb0755eec..a841d5cd56aad04d446916773f5e86b88d22b1af 100644
--- a/lib/models/TFASecret.php
+++ b/lib/models/TFASecret.php
@@ -8,16 +8,15 @@ use OTPHP\TOTP;
  * @license GPL2 or any later version
  * @since   Stud.IP 4.4
  *
- * @property string $id
- * @property string $user_id
- * @property string $secret
- * @property string $type
- * @property bool $confirmed
- * @property int $mkdate
- * @property int $chdate
- *
- * @property User $user
- * @property TFAToken[]|SimpleORMapCollection $tokens
+ * @property string $id alias column for user_id
+ * @property string $user_id database column
+ * @property string $secret database column
+ * @property int $confirmed database column
+ * @property string $type database column
+ * @property int $mkdate database column
+ * @property int $chdate database column
+ * @property SimpleORMapCollection|TFAToken[] $tokens has_many TFAToken
+ * @property User $user belongs_to User
  */
 class TFASecret extends SimpleORMap
 {
diff --git a/lib/models/TFAToken.php b/lib/models/TFAToken.php
index 2eb7873124de3d222823919d9f26597cfbcdd208..3b79d931dd58834162268036c677593c5d2f8317 100644
--- a/lib/models/TFAToken.php
+++ b/lib/models/TFAToken.php
@@ -5,6 +5,11 @@
  * @author  Jan-Hendrik Willms <tleilax+studip@gmail.com>
  * @license GPL2 or any later version
  * @since   Stud.IP 4.4
+ *
+ * @property array $id alias for pk
+ * @property string $user_id database column
+ * @property string $token database column
+ * @property int $mkdate database column
  */
 class TFAToken extends SimpleORMap
 {
diff --git a/lib/models/Token.php b/lib/models/Token.php
index a42cf77b6f593262708a559894ae9dd2ecae20a9..63c6ebc832f9284930a896e594e8ffb0cd15b51a 100644
--- a/lib/models/Token.php
+++ b/lib/models/Token.php
@@ -6,12 +6,12 @@
  * @author    Marco Diedrich <mdiedric@uos.de>
  * @license   GPL2 or any later version
  *
- * @property string $id
- * @property string $token
- * @property string $user_id
- * @property int $expiration
- * @property int $mkdate
- * @property User $user
+ * @property string $id alias column for token
+ * @property string $token database column
+ * @property string $user_id database column
+ * @property int $expiration database column
+ * @property int|null $mkdate database column
+ * @property User $user belongs_to User
  */
 class Token extends SimpleORMap
 {
diff --git a/lib/models/ToolActivation.php b/lib/models/ToolActivation.php
index f3998780656a29346c55c77c3c5d60772ce46b0a..a4a4de24e37cc9170d1a32757aad2593277fe983 100644
--- a/lib/models/ToolActivation.php
+++ b/lib/models/ToolActivation.php
@@ -13,13 +13,16 @@
  * @license     http://www.gnu.org/licenses/gpl-2.0.html GPL version 2
  * @category    Stud.IP
  *
- * @property string range_id database column
- * @property string range_type database column
- * @property string plugin_id database column
- * @property string position database column
- * @property array metadata database column
- * @property string mkdate database column
- * @property string chdate database column
+ * @property array $id alias for pk
+ * @property string $range_id database column
+ * @property string $range_type database column
+ * @property int $plugin_id database column
+ * @property int $position database column
+ * @property JSONArrayObject|null $metadata database column
+ * @property int $mkdate database column
+ * @property int $chdate database column
+ * @property Institute $institute belongs_to Institute
+ * @property Course $course belongs_to Course
  */
 class ToolActivation extends SimpleORMap
 {
@@ -36,7 +39,7 @@ class ToolActivation extends SimpleORMap
             'foreign_key' => 'range_id',
         ];
 
-        $config['serialized_fields']['metadata'] = 'JSONArrayObject';
+        $config['serialized_fields']['metadata'] = JSONArrayObject::class;
 
         $config['registered_callbacks']['before_create'][] = 'setMaxPosition';
 
diff --git a/lib/models/User.class.php b/lib/models/User.class.php
index 99a06ef09d541fe368a440366fc3cef5fa09efec..bb23ca36df21f7ce510e2132343f90fb77563d1e 100644
--- a/lib/models/User.class.php
+++ b/lib/models/User.class.php
@@ -22,57 +22,62 @@
  * @license     http://www.gnu.org/licenses/gpl-2.0.html GPL version 2
  * @category    Stud.IP
  *
- * @property string user_id database column
- * @property string id alias column for user_id
- * @property string username database column
- * @property string password database column
- * @property string perms database column
- * @property string vorname database column
- * @property string nachname database column
- * @property string email database column
- * @property string validation_key database column
- * @property string auth_plugin database column
- * @property string locked database column
- * @property string lock_comment database column
- * @property string locked_by database column
- * @property string visible database column
- * @property string hobby computed column read/write
- * @property string lebenslauf computed column read/write
- * @property string publi computed column read/write
- * @property string schwerp computed column read/write
- * @property string home computed column read/write
- * @property string privatnr computed column read/write
- * @property string privatcell computed column read/write
- * @property string privadr computed column read/write
- * @property string score computed column read/write
- * @property string geschlecht computed column read/write
- * @property string mkdate computed column read/write
- * @property string chdate computed column read/write
- * @property string title_front computed column read/write
- * @property string title_rear computed column read/write
- * @property string preferred_language computed column read/write
- * @property string smsforward_copy computed column read/write
- * @property string smsforward_rec computed column read/write
- * @property string guestbook computed column read/write
- * @property string email_forward computed column read/write
- * @property string motto computed column read/write
- * @property string lock_rule computed column read/write
- * @property SimpleORMapCollection course_memberships has_many CourseMember
- * @property SimpleORMapCollection institute_memberships has_many InstituteMember
- * @property SimpleORMapCollection admission_applications has_many AdmissionApplication
- * @property SimpleORMapCollection archived_course_memberships has_many ArchivedCourseMember
- * @property SimpleORMapCollection datafields has_many DatafieldEntryModel
- * @property SimpleORMapCollection studycourses has_many UserStudyCourse
- * @property SimpleORMapCollection contacts has_many Contact
- * @property UserInfo   info   has_one UserInfo
- * @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
+ * @property string $id alias column for user_id
+ * @property string $user_id database column
+ * @property string $username database column
+ * @property string $password database column
+ * @property string $perms database column
+ * @property string $vorname database column
+ * @property string $nachname database column
+ * @property string $email database column
+ * @property string $validation_key database column
+ * @property string|null $auth_plugin database column
+ * @property int $locked database column
+ * @property string|null $lock_comment database column
+ * @property string|null $locked_by database column
+ * @property string $visible database column
+ * @property SimpleORMapCollection|CourseMember[] $course_memberships has_many CourseMember
+ * @property SimpleORMapCollection|InstituteMember[] $institute_memberships has_many InstituteMember
+ * @property SimpleORMapCollection|AdmissionApplication[] $admission_applications has_many AdmissionApplication
+ * @property SimpleORMapCollection|ArchivedCourseMember[] $archived_course_memberships has_many ArchivedCourseMember
+ * @property SimpleORMapCollection|DatafieldEntryModel[] $datafields has_many DatafieldEntryModel
+ * @property SimpleORMapCollection|UserStudyCourse[] $studycourses has_many UserStudyCourse
+ * @property SimpleORMapCollection|Statusgruppen[] $contactgroups has_many Statusgruppen
+ * @property SimpleORMapCollection|ResourcePermission[] $resource_permissions has_many ResourcePermission
+ * @property SimpleORMapCollection|ResourceTemporaryPermission[] $resource_temporary_permissions has_many ResourceTemporaryPermission
+ * @property SimpleORMapCollection|ConsultationBlock[] $consultation_blocks has_many ConsultationBlock
+ * @property SimpleORMapCollection|ConsultationBooking[] $consultation_bookings has_many ConsultationBooking
+ * @property SimpleORMapCollection|ConsultationResponsibility[] $consultation_responsibilities has_many ConsultationResponsibility
+ * @property SimpleORMapCollection|Kategorie[] $profile_categories has_many Kategorie
+ * @property SimpleORMapCollection|MvvContact[] $mvv_assignments has_many MvvContact
+ * @property SimpleORMapCollection|CourseMemberNotification[] $course_notifications has_many CourseMemberNotification
+ * @property UserInfo $info has_one UserInfo
+ * @property UserOnline $online has_one UserOnline
+ * @property Courseware\Unit $courseware_units has_one Courseware\Unit
+ * @property SimpleORMapCollection|User[] $contacts has_and_belongs_to_many User
+ * @property SimpleORMapCollection|UserDomain[] $domains has_and_belongs_to_many UserDomain
+ * @property-read mixed $config additional field
+ * @property mixed $hobby additional field
+ * @property mixed $lebenslauf additional field
+ * @property mixed $publi additional field
+ * @property mixed $schwerp additional field
+ * @property mixed $home additional field
+ * @property mixed $privatnr additional field
+ * @property mixed $privatcell additional field
+ * @property mixed $privadr additional field
+ * @property mixed $score additional field
+ * @property mixed $geschlecht additional field
+ * @property mixed $mkdate additional field
+ * @property mixed $chdate additional field
+ * @property mixed $title_front additional field
+ * @property mixed $title_rear additional field
+ * @property mixed $preferred_language additional field
+ * @property mixed $smsforward_copy additional field
+ * @property mixed $smsforward_rec additional field
+ * @property mixed $email_forward additional field
+ * @property mixed $motto additional field
+ * @property mixed $lock_rule additional field
+ * @property mixed $oercampus_description additional field
  */
 class User extends AuthUserMd5 implements Range, PrivacyObject
 {
diff --git a/lib/models/UserDomain.php b/lib/models/UserDomain.php
index 49abbbc75bace46aac467e3a00171a0478351573..74681d24f715c3b9986726e5719599cea9b18011 100644
--- a/lib/models/UserDomain.php
+++ b/lib/models/UserDomain.php
@@ -6,6 +6,15 @@
  * @author Jan-Hendrik Willms <tleilax+studip@gmail.com>
  * @copyright 2008
  * @license GPL2 or any later version
+ *
+ * @property string $id alias column for userdomain_id
+ * @property string $userdomain_id database column
+ * @property string $name database column
+ * @property int $restricted_access database column
+ * @property int $mkdate database column
+ * @property int $chdate database column
+ * @property SimpleORMapCollection|User[] $users has_and_belongs_to_many User
+ * @property SimpleORMapCollection|Course[] $courses has_and_belongs_to_many Course
  */
 class UserDomain extends SimpleORMap
 {
diff --git a/lib/models/UserInfo.class.php b/lib/models/UserInfo.class.php
index 403e70b69ee2ccbe3bba08a4e3b0953d369e43e3..28808a22ce56bcd8dfc4fa4f88c68d66dd15f409 100644
--- a/lib/models/UserInfo.class.php
+++ b/lib/models/UserInfo.class.php
@@ -13,29 +13,29 @@
  * @license     http://www.gnu.org/licenses/gpl-2.0.html GPL version 2
  * @category    Stud.IP
  *
- * @property string user_id database column
- * @property string id alias column for user_id
- * @property string hobby database column
- * @property string lebenslauf database column
- * @property string publi database column
- * @property string schwerp database column
- * @property string home database column
- * @property string privatnr database column
- * @property string privatcell database column
- * @property string privadr database column
- * @property string score database column
- * @property string geschlecht database column
- * @property string mkdate database column
- * @property string chdate database column
- * @property string title_front database column
- * @property string title_rear database column
- * @property string preferred_language database column
- * @property string smsforward_copy database column
- * @property string smsforward_rec database column
- * @property string guestbook database column
- * @property string email_forward database column
- * @property string motto database column
- * @property string lock_rule database column
+ * @property string $id alias column for user_id
+ * @property string $user_id database column
+ * @property I18NString $hobby database column
+ * @property I18NString $lebenslauf database column
+ * @property I18NString $publi database column
+ * @property I18NString $schwerp database column
+ * @property string $home database column
+ * @property string $privatnr database column
+ * @property string $privatcell database column
+ * @property string $privadr database column
+ * @property int $score database column
+ * @property int $geschlecht database column
+ * @property int $mkdate database column
+ * @property int $chdate database column
+ * @property string $title_front database column
+ * @property string $title_rear database column
+ * @property string|null $preferred_language database column
+ * @property int $smsforward_copy database column
+ * @property string $smsforward_rec database column
+ * @property int $email_forward database column
+ * @property string $motto database column
+ * @property string $lock_rule database column
+ * @property string|null $oercampus_description database column
  */
 
 class UserInfo extends SimpleORMap
diff --git a/lib/models/UserOnline.class.php b/lib/models/UserOnline.class.php
index ec3c0cb6797554cc0e6c267700b6bc2d22a1f4fd..e18322dd523d188530206ce46ac351802053137c 100644
--- a/lib/models/UserOnline.class.php
+++ b/lib/models/UserOnline.class.php
@@ -13,9 +13,9 @@
  * @license     http://www.gnu.org/licenses/gpl-2.0.html GPL version 2
  * @category    Stud.IP
  *
- * @property string user_id       database column
- * @property string id            alias column for user_id
- * @property string last_lifesign computed column read/write
+ * @property string $id alias column for user_id
+ * @property string $user_id database column
+ * @property int $last_lifesign database column
  */
 class UserOnline extends SimpleORMap
 {
diff --git a/lib/models/UserStudyCourse.class.php b/lib/models/UserStudyCourse.class.php
index 7f7ad3489f7be97ebb073fd965b17fe8e3eb1098..cac37c89ead389e3bb85edd6dbf726e8ac6f33d6 100644
--- a/lib/models/UserStudyCourse.class.php
+++ b/lib/models/UserStudyCourse.class.php
@@ -13,16 +13,19 @@
  * @license     http://www.gnu.org/licenses/gpl-2.0.html GPL version 2
  * @category    Stud.IP
  *
- * @property string user_id database column
- * @property string studiengang_id database column
- * @property string semester database column
- * @property string abschluss_id database column
- * @property string degree_name computed column read/write
- * @property string studycourse_name computed column read/write
- * @property string id computed column read/write
- * @property User user belongs_to User
- * @property Degree degree belongs_to Degree
- * @property StudyCourse studycourse belongs_to StudyCourse
+ * @property array $id alias for pk
+ * @property string $user_id database column
+ * @property string $fach_id database column
+ * @property int|null $semester database column
+ * @property string $abschluss_id database column
+ * @property string|null $version_id database column
+ * @property int|null $mkdate database column
+ * @property int|null $chdate database column
+ * @property User $user belongs_to User
+ * @property Abschluss $degree belongs_to Abschluss
+ * @property Fach $studycourse belongs_to Fach
+ * @property mixed $degree_name additional field
+ * @property mixed $studycourse_name additional field
  */
 class UserStudyCourse extends SimpleORMap implements PrivacyObject
 {
diff --git a/lib/models/Vote.php b/lib/models/Vote.php
index d3d6d75c01b14ef523320c6f4e324cdf693ebdbb..0520401296f3a24a850df3af10ab27ecc15cc01e 100644
--- a/lib/models/Vote.php
+++ b/lib/models/Vote.php
@@ -1,6 +1,21 @@
 <?php
 require_once 'lib/classes/QuestionType.interface.php';
 
+/**
+ * @license GPL2 or any later version
+ *
+ * @property string $id alias column for question_id
+ * @property string $question_id database column
+ * @property string $questionnaire_id database column
+ * @property string $questiontype database column
+ * @property string|null $internal_name database column
+ * @property JSONArrayObject $questiondata database column
+ * @property int $position database column
+ * @property int $chdate database column
+ * @property int $mkdate database column
+ * @property SimpleORMapCollection|QuestionnaireAnswer[] $answers has_many QuestionnaireAnswer
+ * @property Questionnaire $questionnaire belongs_to Questionnaire
+ */
 class Vote extends QuestionnaireQuestion implements QuestionType
 {
     public static function getIcon(bool $active = false) : Icon
diff --git a/lib/models/WebserviceAccessRule.class.php b/lib/models/WebserviceAccessRule.class.php
index 51eceeea40ccf958689dbe7b1bf1a0e7e3acba95..48da0efbbe0d00d79e3e2fb1c3f2edf4fb400bf3 100644
--- a/lib/models/WebserviceAccessRule.class.php
+++ b/lib/models/WebserviceAccessRule.class.php
@@ -24,18 +24,20 @@
  * @license     http://www.gnu.org/licenses/gpl-2.0.html GPL version 2
  * @category    Stud.IP
  *
- * @property string api_key database column
- * @property string method database column
- * @property string ip_range database column
- * @property string type database column
- * @property string id database column
+ * @property string $api_key database column
+ * @property string $method database column
+ * @property CSVArrayObject $ip_range database column
+ * @property string $type database column
+ * @property int $id database column
+ * @property int|null $mkdate database column
+ * @property int|null $chdate database column
  */
 class WebserviceAccessRule extends SimpleORMap
 {
     protected static function configure($config = [])
     {
         $config['db_table'] = 'webservice_access_rules';
-        $config['serialized_fields']['ip_range'] = 'CSVArrayObject';
+        $config['serialized_fields']['ip_range'] = CSVArrayObject::class;
         parent::configure($config);
     }
 
diff --git a/lib/models/WikiPage.class.php b/lib/models/WikiPage.class.php
index 82abcd418858853aaf122926272e07d486b7083e..b6cc4d25d911313baedbf8e8b6a9b8a8aae114fa 100644
--- a/lib/models/WikiPage.class.php
+++ b/lib/models/WikiPage.class.php
@@ -11,15 +11,20 @@
  * @author    mlunzena
  * @copyright (c) Authors
  *
- * @property string range_id database column
- * @property string user_id database column
- * @property string keyword database column
- * @property string body database column
- * @property string ancestor database column
- * @property string chdate database column
- * @property string version database column
- * @property string id computed column read/write
- * @property User author belongs_to User
+ * @property array $id alias for pk
+ * @property string $range_id database column
+ * @property string|null $user_id database column
+ * @property string $keyword database column
+ * @property string $body database column
+ * @property string|null $ancestor database column
+ * @property int|null $chdate database column
+ * @property int $version database column
+ * @property int|null $mkdate database column
+ * @property User|null $author belongs_to User
+ * @property Course $course belongs_to Course
+ * @property-read mixed $parent additional field
+ * @property-read mixed $children additional field
+ * @property-read mixed $config additional field
  */
 class WikiPage extends SimpleORMap implements PrivacyObject
 {
diff --git a/lib/models/WikiPageConfig.php b/lib/models/WikiPageConfig.php
index 722356d8af6f32e7769f336d609c26d7cff03df7..e82d694f41dc6a79e5f2a904668f8cb0df1431ca 100644
--- a/lib/models/WikiPageConfig.php
+++ b/lib/models/WikiPageConfig.php
@@ -9,6 +9,16 @@
  *
  * @author      Elmar Ludwig
  * @license     http://www.gnu.org/licenses/gpl-2.0.html GPL version 2
+ *
+ * @property array $id alias for pk
+ * @property string $range_id database column
+ * @property string $keyword database column
+ * @property int $read_restricted database column
+ * @property int $edit_restricted database column
+ * @property int|null $mkdate database column
+ * @property int|null $chdate database column
+ * @property Course $course belongs_to Course
+ * @property Institute $institute belongs_to Institute
  */
 class WikiPageConfig extends SimpleORMap
 {
diff --git a/lib/models/eTask/Assignment.php b/lib/models/eTask/Assignment.php
index 6320684dd7dfb2eb13c3afc77525e9220445e148..22636dab2666714db5d6e8e5630cbca6dba8470b 100644
--- a/lib/models/eTask/Assignment.php
+++ b/lib/models/eTask/Assignment.php
@@ -2,23 +2,26 @@
 
 namespace eTask;
 
+use JSONArrayObject;
+
 /**
  * eTask conforming assignment definition.
  *
- * @property int id database column
- * @property int test_id database column
- * @property string range_type database column
- * @property string range_id database column
- * @property string type database column
- * @property string start database column
- * @property string end database column
- * @property int active database column
- * @property string options database column
- * @property eTask\Test test belongs_to etask\Test
- * @property SimpleORMapCollection attempts has_many etask\Attempt
- * @property SimpleORMapCollection ranges has_many etask\AssignmentRange
- * @property SimpleORMapCollection responses has_many etask\Response
- * @property JSONArrayobject options serialized database column
+ * @property int $id database column
+ * @property int $test_id database column
+ * @property string|null $range_type database column
+ * @property string|null $range_id database column
+ * @property string $type database column
+ * @property int|null $start database column
+ * @property int|null $end database column
+ * @property int $active database column
+ * @property \JSONArrayObject $options database column
+ * @property int|null $mkdate database column
+ * @property int|null $chdate database column
+ * @property \SimpleORMapCollection|Attempt[] $attempts has_many Attempt
+ * @property \SimpleORMapCollection|AssignmentRange[] $ranges has_many AssignmentRange
+ * @property \SimpleORMapCollection|Response[] $responses has_many Response
+ * @property Test $test belongs_to Test
  */
 class Assignment extends \SimpleORMap
 {
@@ -59,7 +62,7 @@ class Assignment extends \SimpleORMap
             'on_store' => 'store'
         ];
 
-        $config['serialized_fields']['options'] = 'JSONArrayObject';
+        $config['serialized_fields']['options'] = JSONArrayObject::class;
 
         parent::configure($config);
     }
diff --git a/lib/models/eTask/AssignmentRange.php b/lib/models/eTask/AssignmentRange.php
index c0c3a3d684462488b12f7b2c299086ac9bf43277..76d2a691cc33270e3434b636b360d44a07f2a82c 100644
--- a/lib/models/eTask/AssignmentRange.php
+++ b/lib/models/eTask/AssignmentRange.php
@@ -2,14 +2,19 @@
 
 namespace eTask;
 
+use JSONArrayObject;
+
 /**
  * eTask conforming assignment-range relation definition.
  *
- * @property int assignment_id database column
- * @property string range_type database column
- * @property string range_id database column
- * @property eTask\Assignment assignment belongs_to etask\Assignment
- * @property JSONArrayobject options serialized database column
+ * @property int $id database column
+ * @property int $assignment_id database column
+ * @property string $range_type database column
+ * @property string $range_id database column
+ * @property \JSONArrayObject $options database column
+ * @property int|null $mkdate database column
+ * @property int|null $chdate database column
+ * @property Assignment $assignment belongs_to Assignment
  */
 class AssignmentRange extends \SimpleORMap
 {
@@ -29,7 +34,7 @@ class AssignmentRange extends \SimpleORMap
             'foreign_key' => 'assignment_id'
         ];
 
-        $config['serialized_fields']['options'] = 'JSONArrayObject';
+        $config['serialized_fields']['options'] = JSONArrayObject::class;
 
         parent::configure($config);
     }
diff --git a/lib/models/eTask/Attempt.php b/lib/models/eTask/Attempt.php
index f4a6cbe5fb1ac634cd8675c4d59048a261d943b1..2720f47a2a919d0692d46700bca7c5fccae9b613 100644
--- a/lib/models/eTask/Attempt.php
+++ b/lib/models/eTask/Attempt.php
@@ -1,17 +1,20 @@
 <?php
 namespace eTask;
 
+use JSONArrayObject;
+
 /**
  * eTask conforming assignment attempt definition.
  *
- * @property int id database column
- * @property int assignment_id database column
- * @property string user_id database column
- * @property string start database column
- * @property string end database column
- * @property string options database column
- * @property eTask\Assignment assignment belongs_to etask\Assignment
- * @property JSONArrayobject options serialized database column
+ * @property int $id database column
+ * @property int $assignment_id database column
+ * @property string $user_id database column
+ * @property int|null $start database column
+ * @property int|null $end database column
+ * @property \JSONArrayObject $options database column
+ * @property int|null $mkdate database column
+ * @property int|null $chdate database column
+ * @property Assignment $assignment belongs_to Assignment
  */
 class Attempt extends \SimpleORMap implements \PrivacyObject
 {
@@ -31,7 +34,7 @@ class Attempt extends \SimpleORMap implements \PrivacyObject
             'foreign_key' => 'assignment_id'
         ];
 
-        $config['serialized_fields']['options'] = 'JSONArrayObject';
+        $config['serialized_fields']['options'] = JSONArrayObject::class;
 
         parent::configure($config);
     }
diff --git a/lib/models/eTask/ConfigureTrait.php b/lib/models/eTask/ConfigureTrait.php
index 10f4dda3e811d7d4f826a70b26ef8860a61d751c..39b8b714b6580cf0c701e90b0b0b3c76f22a8f0f 100644
--- a/lib/models/eTask/ConfigureTrait.php
+++ b/lib/models/eTask/ConfigureTrait.php
@@ -38,13 +38,13 @@ trait ConfigureTrait
     private static function configureClassNames($config = [])
     {
         $defaultTypes = [
-            'Assignment' => '\\eTask\\Assignment',
-            'AssignmentRange' => '\\eTask\\AssignmentRange',
-            'Attempt' => '\\eTask\\Attempt',
-            'Response' => '\\eTask\\Response',
-            'Task' => '\\eTask\\Task',
-            'Test' => '\\eTask\\Test',
-            'TestTask' => '\\eTask\\TestTask'
+            'Assignment'      => Assignment::class,
+            'AssignmentRange' => AssignmentRange::class,
+            'Attempt'         => Attempt::class,
+            'Response'        => Response::class,
+            'Task'            => Task::class,
+            'Test'            => Test::class,
+            'TestTask'        => TestTask::class,
         ];
 
         $types = [];
diff --git a/lib/models/eTask/Response.php b/lib/models/eTask/Response.php
index 5b2edb564c0deedad07cc1f1a223a05bbe0455e9..fbed047800dce734305d4bba29d1d185dbc3ba05 100644
--- a/lib/models/eTask/Response.php
+++ b/lib/models/eTask/Response.php
@@ -1,27 +1,29 @@
 <?php
 namespace eTask;
 
+use JSONArrayObject;
+use StoredUserData;
+use User;
+
 /**
  * eTask conforming assignment definition.
  *
- *  @property int id database column
- *  @property int assignment_id database column
- *  @property int task_id database column
- *  @property string user_id database column
- *  @property string response database column
- *  @property int state database column
- *  @property float points database column
- *  @property string feedback database column
- *  @property string grader_id database column
- *  @property string mkdate database column
- *  @property string chdate database column
- *  @property string options database column
- *  @property eTask\Assignment assignment belongs_to etask\Assignment
- *  @property eTask\Task task belongs_to etask\Task
- *  @property User user belongs_to User
- *  @property User grader belongs_to User
- *  @property JSONArrayobject response serialized database column
- *  @property JSONArrayobject options serialized database column
+ * @property int $id database column
+ * @property int $assignment_id database column
+ * @property int $task_id database column
+ * @property string $user_id database column
+ * @property \JSONArrayObject $response database column
+ * @property int|null $state database column
+ * @property float|null $points database column
+ * @property string|null $feedback database column
+ * @property string|null $grader_id database column
+ * @property int $mkdate database column
+ * @property int $chdate database column
+ * @property \JSONArrayObject $options database column
+ * @property Assignment $assignment belongs_to Assignment
+ * @property Task $task belongs_to Task
+ * @property \User $user belongs_to \User
+ * @property \User $grader belongs_to \User
  */
 class Response extends \SimpleORMap implements \PrivacyObject
 {
@@ -47,17 +49,17 @@ class Response extends \SimpleORMap implements \PrivacyObject
         ];
 
         $config['belongs_to']['user'] = [
-            'class_name' => '\\User',
+            'class_name' => User::class,
             'foreign_key' => 'user_id'
         ];
 
         $config['belongs_to']['grader'] = [
-            'class_name' => '\\User',
+            'class_name' => User::class,
             'foreign_key' => 'user_id'
         ];
 
-        $config['serialized_fields']['response'] = 'JSONArrayObject';
-        $config['serialized_fields']['options'] = 'JSONArrayObject';
+        $config['serialized_fields']['response'] = JSONArrayObject::class;
+        $config['serialized_fields']['options'] = JSONArrayObject::class;
 
         parent::configure($config);
     }
@@ -68,7 +70,7 @@ class Response extends \SimpleORMap implements \PrivacyObject
      *
      * @param StoredUserData $storage object to store data into
      */
-    public static function exportUserData(\StoredUserData $storage)
+    public static function exportUserData(StoredUserData $storage)
     {
         $sorm = self::findBySQL("user_id = ?", [$storage->user_id]);
         if ($sorm) {
diff --git a/lib/models/eTask/Task.php b/lib/models/eTask/Task.php
index 989915d7863475f7a0e4e250bba6a723dd3514fc..40c5404ac94556994ab8a53ec6cede3f15c3b2e6 100644
--- a/lib/models/eTask/Task.php
+++ b/lib/models/eTask/Task.php
@@ -2,24 +2,25 @@
 
 namespace eTask;
 
+use JSONArrayObject;
+use User;
+
 /**
  * eTask conforming task definition.
  *
- * @property int id database column
- * @property string type database column
- * @property string title database column
- * @property string description database column
- * @property string task database column
- * @property string user_id database column
- * @property string mkdate database column
- * @property string chdate database column
- * @property string options database column
- * @property User owner belongs_to User
- * @property SimpleORMapCollection tests additional field etask\Test
- * @property SimpleORMapCollection test_tasks has_many etask\TestTask
- * @property SimpleORMapCollection responses has_many etask\Response
- * @property JSONArrayobject task serialized database column
- * @property JSONArrayobject options serialized database column
+ * @property int $id database column
+ * @property string $type database column
+ * @property string $title database column
+ * @property string $description database column
+ * @property \JSONArrayObject $task database column
+ * @property string $user_id database column
+ * @property int $mkdate database column
+ * @property int $chdate database column
+ * @property \JSONArrayObject $options database column
+ * @property \SimpleORMapCollection|TestTask[] $test_tasks has_many TestTask
+ * @property \SimpleORMapCollection|Response[] $responses has_many Response
+ * @property \User $owner belongs_to \User
+ * @property \SimpleORMapCollection|Test[] $tests has_and_belongs_to_many Test
  */
 class Task extends \SimpleORMap implements \PrivacyObject
 {
@@ -35,7 +36,7 @@ class Task extends \SimpleORMap implements \PrivacyObject
         $config['relationTypes'] = self::configureClassNames($config);
 
         $config['belongs_to']['owner'] = [
-            'class_name' => '\\User',
+            'class_name' => User::class,
             'foreign_key' => 'user_id'
         ];
 
@@ -61,8 +62,8 @@ class Task extends \SimpleORMap implements \PrivacyObject
             'on_store' => 'store'
         ];
 
-        $config['serialized_fields']['task'] = 'JSONArrayObject';
-        $config['serialized_fields']['options'] = 'JSONArrayObject';
+        $config['serialized_fields']['task'] = JSONArrayObject::class;
+        $config['serialized_fields']['options'] = JSONArrayObject::class;
 
         parent::configure($config);
     }
diff --git a/lib/models/eTask/Test.php b/lib/models/eTask/Test.php
index 2f35cd42c99948ec39da9069b61abd8e8763e545..8554a060fd78212e5891392cb37b3b53b1a5371e 100644
--- a/lib/models/eTask/Test.php
+++ b/lib/models/eTask/Test.php
@@ -2,21 +2,23 @@
 
 namespace eTask;
 
+use JSONArrayObject;
+use User;
+
 /**
  * eTask conforming test definition.
  *
- * @property int id database column
- * @property string title database column
- * @property string description database column
- * @property string user_id database column
- * @property string mkdate database column
- * @property string chdate database column
- * @property string options database column
- * @property SimpleORMapCollection tasks additional field etask\Task
- * @property SimpleORMapCollection testtasks has_many etask\TestTask
- * @property User owner belongs_to User
- * @property SimpleORMapCollection assignments has_many etask\Assignment
- * @property JSONArrayobject options serialized database column
+ * @property int $id database column
+ * @property string $title database column
+ * @property string $description database column
+ * @property string $user_id database column
+ * @property int $mkdate database column
+ * @property int $chdate database column
+ * @property \JSONArrayObject $options database column
+ * @property \SimpleORMapCollection|TestTask[] $testtasks has_many TestTask
+ * @property \SimpleORMapCollection|Assignment[] $assignments has_many Assignment
+ * @property \User $owner belongs_to \User
+ * @property \SimpleORMapCollection|Task[] $tasks has_and_belongs_to_many Task
  */
 class Test extends \SimpleORMap implements \PrivacyObject
 {
@@ -48,7 +50,7 @@ class Test extends \SimpleORMap implements \PrivacyObject
         ];
 
         $config['belongs_to']['owner'] = [
-            'class_name'  => '\\User',
+            'class_name'  => User::class,
             'foreign_key' => 'user_id'
         ];
 
@@ -59,7 +61,7 @@ class Test extends \SimpleORMap implements \PrivacyObject
             'on_store' => 'store'
         ];
 
-        $config['serialized_fields']['options'] = 'JSONArrayObject';
+        $config['serialized_fields']['options'] = JSONArrayObject::class;
 
         parent::configure($config);
     }
diff --git a/lib/models/eTask/TestTask.php b/lib/models/eTask/TestTask.php
index ecedad7889785e13d88015cbbacce86d9af76e56..675949126e4570d509ae2264598e1dd23e06dc0d 100644
--- a/lib/models/eTask/TestTask.php
+++ b/lib/models/eTask/TestTask.php
@@ -2,17 +2,21 @@
 
 namespace eTask;
 
+use JSONArrayObject;
+
 /**
  * eTask conforming test task relation.
  *
- * @property int test_id database column
- * @property int task_id database column
- * @property int position database column
- * @property float points database column
- * @property string options database column
- * @property eTask\Test test belongs_to etask\Test
- * @property eTask\Task task belongs_to etask\Task
- * @property JSONArrayobject options serialized database column
+ * @property array $id alias for pk
+ * @property int $test_id database column
+ * @property int $task_id database column
+ * @property int $position database column
+ * @property float|null $points database column
+ * @property \JSONArrayObject $options database column
+ * @property int|null $mkdate database column
+ * @property int|null $chdate database column
+ * @property Test $test belongs_to Test
+ * @property Task $task belongs_to Task
  */
 class TestTask extends \SimpleORMap
 {
@@ -35,7 +39,7 @@ class TestTask extends \SimpleORMap
             'class_name' => $config['relationTypes']['Task'],
             'foreign_key' => 'task_id'];
 
-        $config['serialized_fields']['options'] = 'JSONArrayObject';
+        $config['serialized_fields']['options'] = JSONArrayObject::class;
 
         parent::configure($config);
     }
diff --git a/lib/models/resources/BrokenResource.class.php b/lib/models/resources/BrokenResource.class.php
index d1014ef3932d885040bcb979ff7358c66c0a7a52..5266b4f1430672a1af820f0aadd5a4240eb30c5f 100644
--- a/lib/models/resources/BrokenResource.class.php
+++ b/lib/models/resources/BrokenResource.class.php
@@ -3,6 +3,11 @@
 /**
  * ResourceLabel.class.php - model class for a resource label
  *
+ * The BrokenResource class represents resources whose class
+ * cannot be found due to missing Resource specialisations
+ * that cannot be loaded. This can happen if a plugin is uninstalled
+ * without removing the resources that are handled by the plugin.
+ *
  * 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
@@ -16,14 +21,26 @@
  * @since       4.5
  *
  * All properties are inherited from the parent class (Resource).
- */
-
-
-/**
- * The BrokenResource class represents resources whose class
- * cannot be found due to missing Resource specialisations
- * that cannot be loaded. This can happen if a plugin is uninstalled
- * without removing the resources that are handled by the plugin.
+ *
+ * @property string $id database column
+ * @property string $parent_id database column
+ * @property string $category_id database column
+ * @property int|null $level database column
+ * @property string $name database column
+ * @property I18NString|null $description database column
+ * @property int $requestable database column
+ * @property int $lockable database column
+ * @property int $mkdate database column
+ * @property int $chdate database column
+ * @property int $sort_position database column
+ * @property SimpleORMapCollection|ResourceProperty[] $properties has_many ResourceProperty
+ * @property SimpleORMapCollection|ResourcePermission[] $permissions has_many ResourcePermission
+ * @property SimpleORMapCollection|ResourceRequest[] $requests has_many ResourceRequest
+ * @property SimpleORMapCollection|ResourceBooking[] $bookings has_many ResourceBooking
+ * @property SimpleORMapCollection|Resource[] $children has_many Resource
+ * @property ResourceCategory $category belongs_to ResourceCategory
+ * @property Resource $parent belongs_to Resource
+ * @property mixed $class_name additional field
  */
 class BrokenResource extends Resource
 {
@@ -56,7 +73,7 @@ class BrokenResource extends Resource
         $preparation_time = 0,
         $description = '',
         $internal_comment = '',
-        $booking_type = 0
+        $booking_type = ResourceBooking::TYPE_NORMAL
     )
     {
         return null;
@@ -68,7 +85,7 @@ class BrokenResource extends Resource
         $preparation_time = 0,
         $description = '',
         $internal_comment = '',
-        $booking_type = 0,
+        $booking_type = ResourceBooking::TYPE_NORMAL,
         $prepend_preparation_time = false,
         $notify_lecturers = false
     )
@@ -86,7 +103,7 @@ class BrokenResource extends Resource
         $preparation_time = 0,
         $description = '',
         $internal_comment = '',
-        $booking_type = 0,
+        $booking_type = ResourceBooking::TYPE_NORMAL,
         $force_booking = false
     ) {
         return null;
diff --git a/lib/models/resources/Building.class.php b/lib/models/resources/Building.class.php
index f6bb5a1d1719a20433e5084c067d58fb60817ce1..0edb98393a1c34c2fc6c8d2159860073d993fece 100644
--- a/lib/models/resources/Building.class.php
+++ b/lib/models/resources/Building.class.php
@@ -3,6 +3,9 @@
 /**
  * Building.class.php - model class for a resource which is a building
  *
+ * The building class is a derived class from the Resource class
+ * which includes specialisations for Building resource types.
+ *
  * 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
@@ -15,15 +18,31 @@
  * @package     resources
  * @since       4.1
  *
- * @property string id building-ID (equal to Resource.resource_id)
- * @property Location Location
- * Other properties are inherited from the parent class (Resource).
- */
-
-
-/**
- * The building class is a derived class from the Resource class
- * which includes specialisations for Building resource types.
+ * @property string $id database column
+ * @property string $parent_id database column
+ * @property string $category_id database column
+ * @property int|null $level database column
+ * @property string $name database column
+ * @property I18NString|null $description database column
+ * @property int $requestable database column
+ * @property int $lockable database column
+ * @property int $mkdate database column
+ * @property int $chdate database column
+ * @property int $sort_position database column
+ * @property SimpleORMapCollection|ResourceProperty[] $properties has_many ResourceProperty
+ * @property SimpleORMapCollection|ResourcePermission[] $permissions has_many ResourcePermission
+ * @property SimpleORMapCollection|ResourceRequest[] $requests has_many ResourceRequest
+ * @property SimpleORMapCollection|ResourceBooking[] $bookings has_many ResourceBooking
+ * @property SimpleORMapCollection|Resource[] $children has_many Resource
+ * @property ResourceCategory $category belongs_to ResourceCategory
+ * @property Resource $parent belongs_to Resource
+ * @property mixed $address additional field
+ * @property mixed $number additional field
+ * @property mixed $geo_coordinates additional field
+ * @property-read mixed $location additional field
+ * @property-read mixed $rooms additional field
+ * @property mixed $facility_manager additional field
+ * @property mixed $class_name additional field
  */
 class Building extends Resource
 {
@@ -407,7 +426,7 @@ class Building extends Resource
         $preparation_time = 0,
         $description = '',
         $internal_comment = '',
-        $booking_type = 0
+        $booking_type = ResourceBooking::TYPE_NORMAL
     )
     {
         return null;
@@ -419,7 +438,7 @@ class Building extends Resource
         $preparation_time = 0,
         $description = '',
         $internal_comment = '',
-        $booking_type = 0,
+        $booking_type = ResourceBooking::TYPE_NORMAL,
         $prepend_preparation_time = false,
         $notify_lecturers = false
     )
@@ -438,7 +457,7 @@ class Building extends Resource
         $preparation_time = 0,
         $description = '',
         $internal_comment = '',
-        $booking_type = 0,
+        $booking_type = ResourceBooking::TYPE_NORMAL,
         $force_booking = false
     )
     {
diff --git a/lib/models/resources/GlobalResourceLock.class.php b/lib/models/resources/GlobalResourceLock.class.php
index 541cc0ffe28663cd6cc13a7b093e4962ea60ad27..b1753f5e9e7d9d32fc9d06b0a4da821e64e6eea4 100644
--- a/lib/models/resources/GlobalResourceLock.class.php
+++ b/lib/models/resources/GlobalResourceLock.class.php
@@ -15,15 +15,14 @@
  * @package     resources
  * @since       4.5
  *
- * @property string lock_id database column
- * @property string id alias for lock_id
- * @property string user_id database column
- * @property string begin database column
- * @property string end database column
- * @property string type database column
- * @property string mkdate database column
- * @property string chdate database column
- * @property Resource resource belongs_to Resource
+ * @property string $id alias column for lock_id
+ * @property string $lock_id database column
+ * @property int $begin database column
+ * @property int $end database column
+ * @property string $type database column
+ * @property string $user_id database column
+ * @property int $mkdate database column
+ * @property int $chdate database column
  */
 class GlobalResourceLock extends SimpleORMap
 {
diff --git a/lib/models/resources/Location.class.php b/lib/models/resources/Location.class.php
index c5431533963938cd32e48c0612dc45ccd084794d..8e793821622859f5b2e4fcbb25063bde74cc27d2 100644
--- a/lib/models/resources/Location.class.php
+++ b/lib/models/resources/Location.class.php
@@ -15,8 +15,28 @@
  * @package     resources
  * @since       4.1
  *
- * @property string id location-ID (equal to Resource.resource_id)
- * Other properties are inherited from the parent class (Resource).
+ * @property string $id database column
+ * @property string $parent_id database column
+ * @property string $category_id database column
+ * @property int|null $level database column
+ * @property string $name database column
+ * @property I18NString|null $description database column
+ * @property int $requestable database column
+ * @property int $lockable database column
+ * @property int $mkdate database column
+ * @property int $chdate database column
+ * @property int $sort_position database column
+ * @property SimpleORMapCollection|ResourceProperty[] $properties has_many ResourceProperty
+ * @property SimpleORMapCollection|ResourcePermission[] $permissions has_many ResourcePermission
+ * @property SimpleORMapCollection|ResourceRequest[] $requests has_many ResourceRequest
+ * @property SimpleORMapCollection|ResourceBooking[] $bookings has_many ResourceBooking
+ * @property SimpleORMapCollection|Resource[] $children has_many Resource
+ * @property ResourceCategory $category belongs_to ResourceCategory
+ * @property Resource $parent belongs_to Resource
+ * @property mixed $geo_coordinates additional field
+ * @property-read mixed $buildings additional field
+ * @property mixed $director additional field
+ * @property mixed $class_name additional field
  */
 class Location extends Resource
 {
@@ -328,7 +348,7 @@ class Location extends Resource
         $preparation_time = 0,
         $description = '',
         $internal_comment = '',
-        $booking_type = 0
+        $booking_type = ResourceBooking::TYPE_NORMAL
     )
     {
         return null;
@@ -340,7 +360,7 @@ class Location extends Resource
         $preparation_time = 0,
         $description = '',
         $internal_comment = '',
-        $booking_type = 0,
+        $booking_type = ResourceBooking::TYPE_NORMAL,
         $prepend_preparation_time = false,
         $notify_lecturers = false
     )
@@ -358,7 +378,7 @@ class Location extends Resource
         $preparation_time = 0,
         $description = '',
         $internal_comment = '',
-        $booking_type = 0,
+        $booking_type = ResourceBooking::TYPE_NORMAL,
         $force_booking = false
     )
     {
diff --git a/lib/models/resources/Resource.class.php b/lib/models/resources/Resource.class.php
index 9050734d217ff09811a772d2a468f5742c8e9f4c..531bc4ca869031227d89af5d4f9c0494f474c275 100644
--- a/lib/models/resources/Resource.class.php
+++ b/lib/models/resources/Resource.class.php
@@ -3,6 +3,11 @@
 /**
  * Resource.class.php - model class for a resource
  *
+ * The Resource class is the base class of the new
+ * Room and Resource management system in Stud.IP.
+ * It provides core functionality for handling general resources
+ * and can be derived for handling special resources.
+ *
  * 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
@@ -15,31 +20,25 @@
  * @package     resources
  * @since       4.5
  *
- * @property string resource_id database column
- * @property string id alias column for resource_id
- * @property string parent_id database column
- * @property string category_id database column
- * @property string level database column
- * @property string name database column
- * @property string description database column
- * @property string requestable database column
- * @property string sort_position database column
- * @property string mkdate database column
- * @property string chdate database column
- * @property SimpleORMapCollection category belongs_to ResourceCategory
- * @property SimpleORMapCollection properties has_many ResourceProperty
- * @property SimpleORMapCollection permissions has_many ResourcePermission
- * @property SimpleORMapCollection bookings has_many ResourceBooking
- * @property SimpleORMapCollection children has_many Resource
- * @property FolderType folder
- */
-
-
-/**
- * The Resource class is the base class of the new
- * Room and Resource management system in Stud.IP.
- * It provides core functionality for handling general resources
- * and can be derived for handling special resources.
+ * @property string $id database column
+ * @property string $parent_id database column
+ * @property string $category_id database column
+ * @property int|null $level database column
+ * @property string $name database column
+ * @property I18NString|null $description database column
+ * @property int $requestable database column
+ * @property int $lockable database column
+ * @property int $mkdate database column
+ * @property int $chdate database column
+ * @property int $sort_position database column
+ * @property SimpleORMapCollection|ResourceProperty[] $properties has_many ResourceProperty
+ * @property SimpleORMapCollection|ResourcePermission[] $permissions has_many ResourcePermission
+ * @property SimpleORMapCollection|ResourceRequest[] $requests has_many ResourceRequest
+ * @property SimpleORMapCollection|ResourceBooking[] $bookings has_many ResourceBooking
+ * @property SimpleORMapCollection|Resource[] $children has_many Resource
+ * @property ResourceCategory $category belongs_to ResourceCategory
+ * @property Resource $parent belongs_to Resource
+ * @property mixed $class_name additional field
  */
 class Resource extends SimpleORMap implements StudipItem
 {
@@ -454,7 +453,7 @@ class Resource extends SimpleORMap implements StudipItem
         $preparation_time = 0,
         $description = '',
         $internal_comment = '',
-        $booking_type = 0
+        $booking_type = ResourceBooking::TYPE_NORMAL
     )
     {
         return $this->createBooking(
@@ -505,7 +504,7 @@ class Resource extends SimpleORMap implements StudipItem
         $preparation_time = 0,
         $description = '',
         $internal_comment = '',
-        $booking_type = 0,
+        $booking_type = ResourceBooking::TYPE_NORMAL,
         $prepend_preparation_time = false,
         $notify_lecturers = false
     )
@@ -684,7 +683,7 @@ class Resource extends SimpleORMap implements StudipItem
         $preparation_time = 0,
         $description = '',
         $internal_comment = '',
-        $booking_type = 0,
+        $booking_type = ResourceBooking::TYPE_NORMAL,
         $force_booking = false
     )
     {
@@ -1275,7 +1274,7 @@ class Resource extends SimpleORMap implements StudipItem
         }
 
         $lock                   = new ResourceBooking();
-        $lock->booking_type     = '2';
+        $lock->booking_type     = ResourceBooking::TYPE_LOCK;
         $lock->range_id         = $user->id;
         $lock->resource_id      = $this->id;
         $lock->begin            = $begin->getTimestamp();
diff --git a/lib/models/resources/ResourceBooking.class.php b/lib/models/resources/ResourceBooking.class.php
index 51c7aed422b6a477c28843a02b2328635b928e7b..e496867aa43c4a7fdfee6783f004ad105fa12147 100644
--- a/lib/models/resources/ResourceBooking.class.php
+++ b/lib/models/resources/ResourceBooking.class.php
@@ -3,6 +3,10 @@
 /**
  * ResourceBooking.class.php - model class for resource bookings
  *
+ * The ResourceBooking class is responsible for storing
+ * bookings of resources in a specified time range
+ * or a time interval.
+ *
  * 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
@@ -14,54 +18,46 @@
  * @category    Stud.IP
  * @package     resources
  * @since       4.5
- */
-
-
-/**
- * The ResourceBooking class is responsible for storing
- * bookings of resources in a specified time range
- * or a time interval.
- *
- * @property string id database column
- * @property string resource_id database column
- * @property string range_id database column
- *     The user, course etc. where the booking (booking)
- *     is associated with.
- * @property string booking_user_id database column
- *     The user who created the booking (booking).
- * @property string description database column
- * @property int begin database column
- * @property int end database column
- * @property int $preparation_time database column
- * @property int booking_type database column: The booking type.
- *     The following types are defined:
- *     0 = normal booking
- *     1 = reservation
- *     2 = lock
- *     3 = planned booking (reservation from external tools)
- *
- * @property int repeat_end database column
- * @property string repetition_interval database column
- *     The repetition_interval column contains a date interval string in a
- *     format that is accepted by the DateInterval class constructor.
- *     Examples for values of the repetition_interval column:
- *     - For an one month interval, the value is "P1M".
- *     - For an interval of two days, the value is "P2D".
- *     See the DateInterval documentation for more examples:
- *     https://secure.php.net/manual/en/class.dateinterval.php
  *
- * @property string internal_comment database column
- * @property int mkdate database column
- * @property int chdate database column
- * @property Resource resource belongs_to Resource
- * @property User assigned_user belongs_to User
- * @property CourseDate assigned_course_date belongs_to CourseDate
+ * The repetition_interval column contains a date interval string in a
+ * format that is accepted by the DateInterval class constructor.
+ * Examples for values of the repetition_interval column:
+ * - For an one month interval, the value is "P1M".
+ * - For an interval of two days, the value is "P2D".
+ * See the DateInterval documentation for more examples:
+ * https://secure.php.net/manual/en/class.dateinterval.php
  *
- * @property-read int $real_begin
- * @property-read DateTime $real_begin_dt
+ * @property string $id database column
+ * @property string $resource_id database column
+ * @property string $range_id database column
+ * @property string|null $description database column
+ * @property int $begin database column
+ * @property int $end database column
+ * @property int|null $repeat_end database column
+ * @property int $mkdate database column
+ * @property int $chdate database column
+ * @property string|null $internal_comment database column
+ * @property int $preparation_time database column
+ * @property int $booking_type database column
+ * @property string $booking_user_id database column
+ * @property string $repetition_interval database column
+ * @property SimpleORMapCollection|ResourceBookingInterval[] $time_intervals has_many ResourceBookingInterval
+ * @property Resource $resource belongs_to Resource
+ * @property User $assigned_user belongs_to User
+ * @property CourseDate $assigned_course_date belongs_to CourseDate
+ * @property User $booking_user belongs_to User
+ * @property mixed $course_id additional field
+ * @property mixed $room_name additional field
+ * @property-read mixed $real_begin additional field
+ * @property-read mixed $real_begin_dt additional field
  */
 class ResourceBooking extends SimpleORMap implements PrivacyObject, Studip\Calendar\EventSource
 {
+    const TYPE_NORMAL = 0;
+    const TYPE_RESERVATION = 1;
+    const TYPE_LOCK = 2;
+    const TYPE_PLANNED = 3;
+
     protected static function configure($config = [])
     {
         $config['db_table'] = 'resource_bookings';
@@ -546,7 +542,7 @@ class ResourceBooking extends SimpleORMap implements PrivacyObject, Studip\Calen
                     $other_booking = self::findByResourceAndTimeRanges(
                         $derived_resource,
                         [$time_interval],
-                        [0, 2],
+                        [self::TYPE_NORMAL, self::TYPE_LOCK],
                         [$this->id]
                     );
                     $course = null;
@@ -875,7 +871,7 @@ class ResourceBooking extends SimpleORMap implements PrivacyObject, Studip\Calen
                     'end' => $this->end,
                 ]
             ],
-            [1, 3],
+            [self::TYPE_RESERVATION, self::TYPE_PLANNED],
             [$this->id]
         );
         foreach ($affected_reservations as $reservation) {
@@ -1634,7 +1630,7 @@ class ResourceBooking extends SimpleORMap implements PrivacyObject, Studip\Calen
         $text_colour = $booking_plan_booking_fg->__toString();
         $event_classes = [];
 
-        if ($this->booking_type == '0') {
+        if ($this->booking_type == self::TYPE_NORMAL) {
             $event_classes[] = 'resource-booking';
             //Check if the booking is a course booking:
             if ($this->getAssignedUserType() === 'course') {
@@ -1643,15 +1639,15 @@ class ResourceBooking extends SimpleORMap implements PrivacyObject, Studip\Calen
                 $colour = $booking_plan_course_booking_bg->__toString();
                 $text_colour = $booking_plan_course_booking_fg->__toString();
             }
-        } elseif ($this->booking_type == '1') {
+        } elseif ($this->booking_type == self::TYPE_RESERVATION) {
             $event_classes[] = 'resource-reservation';
             $colour = $booking_plan_reservation_bg->__toString();
             $text_colour = $booking_plan_reservation_fg->__toString();
-        } elseif ($this->booking_type == '2') {
+        } elseif ($this->booking_type == self::TYPE_LOCK) {
             $event_classes[] = 'resource-lock';
             $colour = $booking_plan_lock_bg->__toString();
             $text_colour = $booking_plan_lock_fg->__toString();
-        } elseif ($this->booking_type == '3') {
+        } elseif ($this->booking_type == self::TYPE_PLANNED) {
             $event_classes[] = 'resource-planned-booking';
             $colour = $booking_plan_planned_booking_bg->__toString();
             $text_colour = $booking_plan_planned_booking_fg->__toString();
@@ -1879,7 +1875,7 @@ class ResourceBooking extends SimpleORMap implements PrivacyObject, Studip\Calen
      */
     public function sendDeleteNotification()
     {
-        if ($this->booking_type != '0') {
+        if ($this->booking_type != self::TYPE_NORMAL) {
             //We only handle real bookings in this method.
             return;
         }
diff --git a/lib/models/resources/ResourceBookingInterval.class.php b/lib/models/resources/ResourceBookingInterval.class.php
index a5b0e437600a027ecdb6f5f9a5ec16a894d46f69..7908e4076e6d91190e8559ea8ea58f1a185c37f0 100644
--- a/lib/models/resources/ResourceBookingInterval.class.php
+++ b/lib/models/resources/ResourceBookingInterval.class.php
@@ -5,6 +5,10 @@
  * all resource bookings time intervals, including those for
  * repetitions.
  *
+ * The ResourceBookingEvent class contains all
+ * time intervals of all resources where they are
+ * assigned.
+ *
  * 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
@@ -17,26 +21,17 @@
  * @package     resources
  * @since       4.1
  *
- * @property string interval_id database column (and primary key)
- * @property string id alias for event_id
- * @property string booking_id database column
- * @property string resource_id database column
- * @property string begin database column
- * @property string end database column
- * @property string takes_place database column. This is set to 1
- *     if the date specified by the interval takes place.
- *     Otherwise it is set to zero which means that the interval
- *     is an exception to the repetition in the booking.
- * @property string mkdate database column
- * @property string chdate database column
- * @property Resource resource belongs_to Resource
- */
-
-
-/**
- * The ResourceBookingEvent class contains all
- * time intervals of all resources where they are
- * assigned.
+ * @property string $id alias column for interval_id
+ * @property string $interval_id database column
+ * @property string $resource_id database column
+ * @property string $booking_id database column
+ * @property int $begin database column
+ * @property int $end database column
+ * @property int $mkdate database column
+ * @property int $chdate database column
+ * @property int $takes_place database column
+ * @property ResourceBooking $booking belongs_to ResourceBooking
+ * @property Resource $resource belongs_to Resource
  */
 class ResourceBookingInterval extends SimpleORMap
 {
diff --git a/lib/models/resources/ResourceCategory.class.php b/lib/models/resources/ResourceCategory.class.php
index 9738cbcef7568eff4e4c68c7b35f6589a212f903..f4ae14d5a7e650898c31b6b25ca37150b62f2115 100644
--- a/lib/models/resources/ResourceCategory.class.php
+++ b/lib/models/resources/ResourceCategory.class.php
@@ -21,15 +21,13 @@
  * @property string $id database column
  * @property string $name database column
  * @property string $description database column
- * @property string $class_name database column: The name of the SORM class
- *     that handles the resource object, defaults to Resource.
- * @property bool $system database column
- * @property int $iconnr database column
+ * @property int $system database column
+ * @property int|null $iconnr database column
+ * @property string $class_name database column
  * @property int $mkdate database column
  * @property int $chdate database column
- *
- * @property ResourcePropertyDefinition[]|SimpleORMapCollection $property_definitions
- * @property ResourceCategoryProperty[]|SimpleORMapCollection $property_links
+ * @property SimpleORMapCollection|ResourceCategoryProperty[] $property_links has_many ResourceCategoryProperty
+ * @property SimpleORMapCollection|ResourcePropertyDefinition[] $property_definitions has_and_belongs_to_many ResourcePropertyDefinition
  */
 class ResourceCategory extends SimpleORMap
 {
diff --git a/lib/models/resources/ResourceCategoryProperty.class.php b/lib/models/resources/ResourceCategoryProperty.class.php
index 2b465185f129c04688358bb4704f29d7ead3c28e..b1460cdaa71d96b509c09868db1710bda9567e23 100644
--- a/lib/models/resources/ResourceCategoryProperty.class.php
+++ b/lib/models/resources/ResourceCategoryProperty.class.php
@@ -16,14 +16,19 @@
  * @package     resources
  * @since       4.5
  *
- * @property string category_id database column
- * @property string property_id database column
- * @property string requestable database column
- * @property string protected database column
- * @property string system database column
- * @property string form_text database column
- * @property string mkdate database column
- * @property string chdate database column
+ * @property array $id alias for pk
+ * @property string $category_id database column
+ * @property string $property_id database column
+ * @property int $requestable database column
+ * @property int $protected database column
+ * @property int $system database column
+ * @property string|null $form_text database column
+ * @property int $mkdate database column
+ * @property int $chdate database column
+ * @property ResourceCategory $category belongs_to ResourceCategory
+ * @property ResourcePropertyDefinition $definition belongs_to ResourcePropertyDefinition
+ * @property mixed $name additional field
+ * @property mixed $type additional field
  */
 
 
diff --git a/lib/models/resources/ResourceLabel.class.php b/lib/models/resources/ResourceLabel.class.php
index b75d0475ab620b57a83cf2e36ba88d9542738890..d9c869f605d4a05403f506bac504427775471be3 100644
--- a/lib/models/resources/ResourceLabel.class.php
+++ b/lib/models/resources/ResourceLabel.class.php
@@ -3,6 +3,11 @@
 /**
  * ResourceLabel.class.php - model class for a resource label
  *
+ * The ResourceLabel class represents headings or subheadings whose
+ * only purpose is helping with organising the resource tree.
+ * ResourceLabel instances must not be booked, reserved or locked.
+ * Furthermore, they cannot be requested.
+ *
  * 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
@@ -16,14 +21,26 @@
  * @since       4.5
  *
  * All properties are inherited from the parent class (Resource).
- */
-
-
-/**
- * The ResourceLabel class represents headings or subheadings whose
- * only purpose is helping with organising the resource tree.
- * ResourceLabel instances must not be booked, reserved or locked.
- * Furthermore, they cannot be requested.
+ *
+ * @property string $id database column
+ * @property string $parent_id database column
+ * @property string $category_id database column
+ * @property int|null $level database column
+ * @property string $name database column
+ * @property I18NString|null $description database column
+ * @property int $requestable database column
+ * @property int $lockable database column
+ * @property int $mkdate database column
+ * @property int $chdate database column
+ * @property int $sort_position database column
+ * @property SimpleORMapCollection|ResourceProperty[] $properties has_many ResourceProperty
+ * @property SimpleORMapCollection|ResourcePermission[] $permissions has_many ResourcePermission
+ * @property SimpleORMapCollection|ResourceRequest[] $requests has_many ResourceRequest
+ * @property SimpleORMapCollection|ResourceBooking[] $bookings has_many ResourceBooking
+ * @property SimpleORMapCollection|Resource[] $children has_many Resource
+ * @property ResourceCategory $category belongs_to ResourceCategory
+ * @property Resource $parent belongs_to Resource
+ * @property mixed $class_name additional field
  */
 class ResourceLabel extends Resource
 {
@@ -49,7 +66,7 @@ class ResourceLabel extends Resource
         $preparation_time = 0,
         $description = '',
         $internal_comment = '',
-        $booking_type = 0
+        $booking_type = ResourceBooking::TYPE_NORMAL
     )
     {
         return null;
@@ -61,7 +78,7 @@ class ResourceLabel extends Resource
         $preparation_time = 0,
         $description = '',
         $internal_comment = '',
-        $booking_type = 0,
+        $booking_type = ResourceBooking::TYPE_NORMAL,
         $prepend_preparation_time = false,
         $notify_lecturers = false
     )
@@ -79,7 +96,7 @@ class ResourceLabel extends Resource
         $preparation_time = 0,
         $description = '',
         $internal_comment = '',
-        $booking_type = 0,
+        $booking_type = ResourceBooking::TYPE_NORMAL,
         $force_booking = false
     )
     {
@@ -223,7 +240,7 @@ class ResourceLabel extends Resource
         return [];
     }
 
-    public function getResourceBookings(DateTime $begin, DateTime $end, array $booking_types = [0])
+    public function getResourceBookings(DateTime $begin, DateTime $end, array $booking_types = [ResourceBooking::TYPE_NORMAL])
     {
         return [];
     }
diff --git a/lib/models/resources/ResourcePermission.class.php b/lib/models/resources/ResourcePermission.class.php
index 7d6a16342787bb0c8ceb8297d2489934ece6c4a5..bd337088c904134a1929bf5624fe35f3bc363e82 100644
--- a/lib/models/resources/ResourcePermission.class.php
+++ b/lib/models/resources/ResourcePermission.class.php
@@ -3,6 +3,13 @@
 /**
  * ResourcePermission.class.php - model class for resource permissions.
  *
+ * Description of the resources permission system:
+ * - admin: An admin may do everything in the resource management:
+ *     edit resource bookings and resources.
+ * - tutor: A tutor may edit all resource bookings.
+ * - autor: An autor may edit his own resource bookings only.
+ * - user: A user may read internal comments on resource bookings.
+ *
  * 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
@@ -15,24 +22,14 @@
  * @package     resources
  * @since       4.5
  *
- * @property string id database column
- * @property string user_id database column
- * @property string resource_id database column
- * @property string perms database column
- * @property string mkdate database column
- * @property string chdate database column
- * @property User user belongs_to User
- * @property Resource resource belongs_to Resource
- */
-
-
-/**
- * Description of the resources permission system:
- *  - admin: An admin may do everything in the resource management:
- *    edit resource bookings and resources.
- *  - tutor: A tutor may edit all resource bookings.
- *  - autor: An autor may edit his own resource bookings only.
- *  - user: A user may read internal comments on resource bookings.
+ * @property array $id alias for pk
+ * @property string $user_id database column
+ * @property string $resource_id database column
+ * @property string $perms database column
+ * @property int $mkdate database column
+ * @property int $chdate database column
+ * @property User $user belongs_to User
+ * @property Resource $resource belongs_to Resource
  */
 class ResourcePermission extends SimpleORMap implements PrivacyObject
 {
diff --git a/lib/models/resources/ResourceProperty.class.php b/lib/models/resources/ResourceProperty.class.php
index 6db96158957bfd11dd9d68da37e2873327e83963..84816446779ac9db86bbd703e332e17d884b672a 100644
--- a/lib/models/resources/ResourceProperty.class.php
+++ b/lib/models/resources/ResourceProperty.class.php
@@ -15,15 +15,19 @@
  * @package     resources
  * @since       TODO
  *
- * @property string property_id database column
- * @property string resource_id database column
- * @property string state database column
- * @property string form_text database column
- * @property string mkdate database column
- * @property string chdate database column
- * @property Resource resource belongs_to Resource
- * @property ResourcePropertyDefinition definition belongs_to
- *     ResourcePropertyDefinition
+ * @property array $id alias for pk
+ * @property string $resource_id database column
+ * @property string $property_id database column
+ * @property string $state database column
+ * @property int $mkdate database column
+ * @property int $chdate database column
+ * @property ResourcePropertyDefinition $definition belongs_to ResourcePropertyDefinition
+ * @property Resource $resource belongs_to Resource
+ * @property mixed $name additional field
+ * @property-read mixed $fullname additional field
+ * @property mixed $display_name additional field
+ * @property mixed $type additional field
+ * @property mixed $info_label additional field
  */
 class ResourceProperty extends SimpleORMap
 {
diff --git a/lib/models/resources/ResourcePropertyDefinition.class.php b/lib/models/resources/ResourcePropertyDefinition.class.php
index 23a6434006cca494bda6458ec533b9c643af29d0..e72717f6dd832c8924753dca176622fd901801d4 100644
--- a/lib/models/resources/ResourcePropertyDefinition.class.php
+++ b/lib/models/resources/ResourcePropertyDefinition.class.php
@@ -18,27 +18,23 @@
  * @package     resources
  * @since       4.1
  *
+ * @property string $id alias column for property_id
  * @property string $property_id database column
- * @property string $id alias for resource_id
- * @property string $name database column The internal name of the property.
- * @property string $display_name The display name of the property.
- * @property string $description database column
- * @property string $type database column ('bool', 'text', 'num', 'select',
- *     'user', 'institute', 'position', 'fileref', 'url')
+ * @property string $name database column
+ * @property I18NString|null $description database column
+ * @property string $type database column
  * @property string $options database column
- * @property string $system database column
- * @property string $info_label database column
- * @property bool $searchable database column
- *     0 = not searchable, 1 = searchable
- * @property bool $range_search database column: Whether a search field
- *     for this property shall display a range selector (1) or not (0).
- *     Setting this attribute is only useful for the property types
- *     'num' and 'position'.
+ * @property int $system database column
+ * @property int $info_label database column
+ * @property I18NString $display_name database column
+ * @property int $searchable database column
+ * @property int $range_search database column
  * @property string $write_permission_level database column
+ * @property int|null $property_group_id database column
+ * @property int|null $property_group_pos database column
  * @property int $mkdate database column
  * @property int $chdate database column
- *
- * @property ResourcePropertyGroup $group
+ * @property ResourcePropertyGroup|null $group belongs_to ResourcePropertyGroup
  */
 
 
diff --git a/lib/models/resources/ResourcePropertyGroup.class.php b/lib/models/resources/ResourcePropertyGroup.class.php
index 9da6762a79b2a3a2bd3bb52dfeae81829e42e0b8..ad539022a8c22a4cbc219eb8439801606ec5671a 100644
--- a/lib/models/resources/ResourcePropertyGroup.class.php
+++ b/lib/models/resources/ResourcePropertyGroup.class.php
@@ -15,11 +15,12 @@
  * @package     resources
  * @since       TODO
  *
- * @property string id database column
- * @property string name database column
- * @property string position database column
- * @property string mkdate database column
- * @property string chdate database column
+ * @property int $id database column
+ * @property string $name database column
+ * @property int $position database column
+ * @property int $mkdate database column
+ * @property int $chdate database column
+ * @property SimpleORMapCollection|ResourcePropertyDefinition[] $properties has_many ResourcePropertyDefinition
  */
 class ResourcePropertyGroup extends SimpleORMap
 {
diff --git a/lib/models/resources/ResourceRequest.class.php b/lib/models/resources/ResourceRequest.class.php
index d5217819094d7dd8f101fa6b63ad235016ad939d..20baf60964c7d31c1146479e2d939cca871a676e 100644
--- a/lib/models/resources/ResourceRequest.class.php
+++ b/lib/models/resources/ResourceRequest.class.php
@@ -14,58 +14,54 @@
  * @category    Stud.IP
  * @package     resources
  * @since       4.5
- */
-
-
-/**
- * ResourceRequest is a model class for resource requests.
  *
- * @property string id database column
- * @property string resource_id database column
- * @property string category_id database column
- * @property string course_id database column
- * @property string termin_id database column
- * @property string metadate_id database column
- * @property string begin database column
- * @property string end database column
- * @property string preparation_time databasse column
- * @property string marked database column
- *     There are four marking states:
- *     0 - not marked
- *     1 - red state
- *     2 - yellow state
- *     3 - green state
- * @property string user_id database column
- * @property string last_modified_by database column
- * @property string comment database column
- * @property string reply_comment database column
- * @property string reply_recipients database column:
- *     enum('requester', 'lecturer')
- * @property string closed database column, possible states are:
- *     0 - room-request is open
- *     1 - room-request has been processed, but no confirmation has been sent
- *     2 - room-request has been processed and a confirmation has been sent
- *     3 - room-request has been declined
+ * The attributes begin and end are only used in simple resource requests.
+ * The "traditional" resource requests use either course_id, metadate_id
+ * or termin_id to store the time ranges connected to the request.
  *
- * @property string mkdate database column
- * @property string chdate database column
- * @property Resource resource belongs_to Resource
- * @property ResourceCategory $category belongs_to Category
- * @property User requester belongs_to User
- * @property User last_modifier belongs_to User
+ * @property string $id database column
+ * @property string $course_id database column
+ * @property string $termin_id database column
+ * @property string $metadate_id database column
+ * @property string $user_id database column
+ * @property string $last_modified_by database column
+ * @property string $resource_id database column
+ * @property string|null $category_id database column
+ * @property string|null $comment database column
+ * @property string|null $reply_comment database column
+ * @property string $reply_recipients database column
+ * @property int $closed database column
+ * @property int|null $mkdate database column
+ * @property int|null $chdate database column
+ * @property int $begin database column
+ * @property int $end database column
+ * @property int $preparation_time database column
+ * @property int $marked database column
+ * @property SimpleORMapCollection|ResourceRequestProperty[] $properties has_many ResourceRequestProperty
+ * @property SimpleORMapCollection|ResourceRequestAppointment[] $appointments has_many ResourceRequestAppointment
+ * @property Resource $resource belongs_to Resource
+ * @property ResourceCategory|null $category belongs_to ResourceCategory
+ * @property User $user belongs_to User
+ * @property User $last_modifier belongs_to User
  * @property Course $course belongs_to Course
  * @property SeminarCycleDate $cycle belongs_to SeminarCycleDate
  * @property CourseDate $date belongs_to CourseDate
- * @property ResourceRequestProperty[]|SimpleORMapCollection $properties has_many ResourceRequestProperty
- * @property ResourceRequestAppointment[]|SimpleORMapCollection $appointments has_many ResourceRequestAppointment
- *
- *
- * The attributes begin and end are only used in simple resource requests.
- * The "traditional" resource requests use either course_id, metadate_id
- * or termin_id to store the time ranges connected to the request.
  */
 class ResourceRequest extends SimpleORMap implements PrivacyObject, Studip\Calendar\EventSource
 {
+    const MARK_NONE = 0;
+    const MARK_RED = 1;
+    const MARK_YELLOW = 2;
+    const MARK_GREEN = 3;
+
+    const REPLY_REQUESTER = 'requester';
+    const REPLY_LECTURER = 'lecturer';
+
+    const STATE_OPEN = 0; // room-request is open
+    const STATE_PENDING = 1; // room-request has been processed, but no confirmation has been sent
+    const STATE_CLOSED = 2; // room-request has been processed and a confirmation has been sent
+    const STATE_DECLINED = 3; // room-request has been declined
+
     /**
      * The amount of defined marking states.
      */
@@ -192,7 +188,10 @@ class ResourceRequest extends SimpleORMap implements PrivacyObject, Studip\Calen
      */
     public static function findOpen()
     {
-        return self::findBySql("closed = '0' ORDER BY mkdate ASC");
+        return self::findBySql(
+            'closed = ? ORDER BY mkdate ASC',
+            [self::STATE_OPEN]
+        );
     }
 
     /**
@@ -473,16 +472,17 @@ class ResourceRequest extends SimpleORMap implements PrivacyObject, Studip\Calen
 
     public static function existsByCourse($course_id, $request_is_open = false)
     {
+        $parameters = [':course_id' => $course_id];
+
         $sql = '';
         if ($request_is_open) {
-            $sql .= "closed = '0' AND ";
+            $sql .= "closed = :closed_state AND ";
+            $parameters[':closed_state'] = self::STATE_OPEN;
         }
 
         $request = self::findOneBySql(
             $sql . "termin_id = '' AND metadate_id = '' AND course_id = :course_id",
-            [
-                'course_id' => $course_id
-            ]
+            $parameters
         );
 
         if ($request) {
@@ -494,16 +494,17 @@ class ResourceRequest extends SimpleORMap implements PrivacyObject, Studip\Calen
 
     public static function existsByDate($date_id, $request_is_open = false)
     {
+        $parameters = [':date_id' => $date_id];
+
         $sql = '';
         if ($request_is_open) {
-            $sql .= "closed = '0' AND ";
+            $sql .= "closed = :closed_state AND ";
+            $parameters[':closed_state'] = self::STATE_OPEN;
         }
 
         $request = self::findOneBySql(
             $sql . "termin_id = :date_id",
-            [
-                'date_id' => $date_id
-            ]
+            $parameters
         );
 
         if ($request) {
@@ -515,16 +516,17 @@ class ResourceRequest extends SimpleORMap implements PrivacyObject, Studip\Calen
 
     public static function existsByMetadate($metadate_id, $request_is_open = false)
     {
+        $parameters = [':metadate_id' => $metadate_id];
+
         $sql = '';
         if ($request_is_open) {
-            $sql .= "closed = '0' AND ";
+            $sql .= "closed = :closed_state AND ";
+            $parameters[':closed_state'] = self::STATE_OPEN;
         }
 
         $request = self::findOneBySql(
             $sql . "metadate_id = :metadate_id",
-            [
-                'metadate_id' => $metadate_id
-            ]
+            $parameters
         );
 
         if ($request) {
@@ -551,10 +553,10 @@ class ResourceRequest extends SimpleORMap implements PrivacyObject, Studip\Calen
     public function cbAfterStore()
     {
         if ($this->isFieldDirty('closed')) {
-            if ((int)$this->closed === 3) {
+            if ($this->closed == self::STATE_DECLINED) {
                 $this->sendRequestDeniedMail();
                 StudipLog::log('RES_REQUEST_DENY', $this->course_id, $this->resource_id, $this->getLoggingInfoText());
-            } elseif ((int)$this->closed === 1 || (int)$this->closed === 2) {
+            } elseif ($this->closed == self::STATE_PENDING || $this->closed == self::STATE_CLOSED) {
                 StudipLog::log('RES_REQUEST_RESOLVE', $this->course_id, $this->resource_id, $this->getLoggingInfoText());
             }
         } else {
@@ -669,12 +671,15 @@ class ResourceRequest extends SimpleORMap implements PrivacyObject, Studip\Calen
      */
     public function closeRequest($notify_lecturers = false, $bookings = [])
     {
-        if ($this->closed >= 2) {
+        if (
+            $this->closed == self::STATE_CLOSED
+            || $this->closed == self::STATE_DECLINED
+        ) {
             //The request has already been closed.
             return true;
         }
 
-        $this->closed = 1;
+        $this->closed = self::STATE_PENDING;
         if ($this->isDirty()) {
             $this->store();
         }
@@ -687,7 +692,7 @@ class ResourceRequest extends SimpleORMap implements PrivacyObject, Studip\Calen
         }
 
         //Sending successful: The request is closed.
-        $this->closed = 2;
+        $this->closed = self::STATE_CLOSED;
         if ($this->isDirty()) {
             return $this->store();
         }
@@ -706,7 +711,7 @@ class ResourceRequest extends SimpleORMap implements PrivacyObject, Studip\Calen
             return self::findByResourceAndTimeRanges(
                 $this->resource,
                 $this->getTimeIntervals(true),
-                0,
+                self::STATE_OPEN,
                 [$this->id]
             );
         }
@@ -725,7 +730,7 @@ class ResourceRequest extends SimpleORMap implements PrivacyObject, Studip\Calen
             return self::countByResourceAndTimeRanges(
                 $this->resource,
                 $this->getTimeIntervals(true),
-                0,
+                self::STATE_OPEN,
                 [$this->id]
             );
         }
@@ -744,7 +749,7 @@ class ResourceRequest extends SimpleORMap implements PrivacyObject, Studip\Calen
             return ResourceBooking::findByResourceAndTimeRanges(
                 $this->resource,
                 $this->getTimeIntervals(true),
-                [0, 2]
+                [ResourceBooking::TYPE_NORMAL, ResourceBooking::TYPE_LOCK]
             );
         }
         return [];
@@ -762,7 +767,7 @@ class ResourceRequest extends SimpleORMap implements PrivacyObject, Studip\Calen
             return ResourceBooking::countByResourceAndTimeRanges(
                 $this->resource,
                 $this->getTimeIntervals(true),
-                [0, 2]
+                [ResourceBooking::TYPE_NORMAL, ResourceBooking::TYPE_LOCK]
             );
         }
         return 0;
@@ -1386,13 +1391,13 @@ class ResourceRequest extends SimpleORMap implements PrivacyObject, Studip\Calen
     public function getStatus()
     {
         switch ($this->closed) {
-            case '0':
+            case self::STATE_OPEN:
                 return 'open';
-            case '1':
+            case self::STATE_PENDING:
                 return 'pending';
-            case '2':
+            case self::STATE_CLOSED:
                 return 'closed';
-            case '3':
+            case self::STATE_DECLINED:
                 return 'declined';
             default:
                 return '';
@@ -1408,9 +1413,9 @@ class ResourceRequest extends SimpleORMap implements PrivacyObject, Studip\Calen
         if ($this->isNew()) {
             return _('Diese Anfrage wurde noch nicht gespeichert.');
         }
-        if ((int)$this->closed === 0) {
+        if ($this->closed == self::STATE_OPEN) {
             return _('Die Anfrage wurde noch nicht bearbeitet.');
-        } else if ((int)$this->closed === 3) {
+        } else if ($this->closed == self::STATE_DECLINED) {
             return _('Die Anfrage wurde bearbeitet und abgelehnt.');
         } else {
             return _('Die Anfrage wurde bearbeitet.');
diff --git a/lib/models/resources/ResourceRequestAppointment.class.php b/lib/models/resources/ResourceRequestAppointment.class.php
index 9914462691ff51478277001715e180bb0a91fb47..929733bdc8515e837db1b191df85b935e16a3fb6 100644
--- a/lib/models/resources/ResourceRequestAppointment.class.php
+++ b/lib/models/resources/ResourceRequestAppointment.class.php
@@ -4,6 +4,9 @@
  * ResourceRequestAppointment.class.php - Contains a model class for
  * the resource_request_appointments table.
  *
+ * ResourceRequestAppointment is a model class to connect
+ * resource requests to CourseDate objects.
+ *
  * 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
@@ -15,21 +18,14 @@
  * @category    Stud.IP
  * @package     resources
  * @since       4.5
- */
-
-
-/**
- * ResourceRequestAppointment is a model class to connect
- * resource requests to CourseDate objects.
- *
- * @property string id database column
- * @property string request_id database column
- * @property string appointment_id database column
- * @property string mkdate database column
- * @property string chdate database column
- * @property ResourceRequest resource_request belongs_to ResourceRequest
- * @property CourseDate appointment belongs_to CourseDate
  *
+ * @property int $id database column
+ * @property string $request_id database column
+ * @property string $appointment_id database column
+ * @property int $mkdate database column
+ * @property int $chdate database column
+ * @property ResourceRequest $resource_request belongs_to ResourceRequest
+ * @property CourseDate $appointment belongs_to CourseDate
  */
 class ResourceRequestAppointment extends SimpleORMap
 {
diff --git a/lib/models/resources/ResourceRequestProperty.class.php b/lib/models/resources/ResourceRequestProperty.class.php
index ec275deae963db075e70bb2d2458c4404969f981..2952be9ba35ffb86062159ce24115840a788c4ad 100644
--- a/lib/models/resources/ResourceRequestProperty.class.php
+++ b/lib/models/resources/ResourceRequestProperty.class.php
@@ -16,15 +16,17 @@
  * @package     resources
  * @since       4.1
  *
- * @property string id database column
- * @property string request_id database column
- * @property string property_id database column
- * @property string state database column
- * @property string mkdate database column
- * @property string chdate database column
- * @property ResourceRequest request belongs_to ResourceRequest
- * @property ResourcePropertyDefinition definition belongs_to
- *     ResourcePropertyDefinition
+ * @property array $id alias for pk
+ * @property string $request_id database column
+ * @property string $property_id database column
+ * @property string|null $state database column
+ * @property int|null $mkdate database column
+ * @property int|null $chdate database column
+ * @property ResourcePropertyDefinition $definition belongs_to ResourcePropertyDefinition
+ * @property ResourceRequest $request belongs_to ResourceRequest
+ * @property mixed $name additional field
+ * @property mixed $display_name additional field
+ * @property mixed $type additional field
  */
 class ResourceRequestProperty extends SimpleORMap
 {
diff --git a/lib/models/resources/ResourceTemporaryPermission.class.php b/lib/models/resources/ResourceTemporaryPermission.class.php
index 1f0bedb0795b2f1f377347a60dffece63bb5767e..ddbc397c3e4aca12b4b1316ad3a6aba98a0b56e9 100644
--- a/lib/models/resources/ResourceTemporaryPermission.class.php
+++ b/lib/models/resources/ResourceTemporaryPermission.class.php
@@ -4,6 +4,9 @@
  * ResourceTemporaryPermission.class.php
  * Contains the ResourceTemporaryPermission class
  *
+ * The ResourceTemporaryPermission class represents temporary permissions
+ * granted to a user for a resource.
+ *
  * 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
@@ -15,23 +18,17 @@
  * @category    Stud.IP
  * @package     resources
  * @since       4.5
- */
-
-
-/**
- * The ResourceTemporaryPermission class represents temporary permissions
- * granted to a user for a resource.
  *
- * @property string id database column
- * @property string resource_id database column
- * @property string user_id database column
- * @property string begin database column
- * @property string end database column
- * @property string perms database column: The permission level granted
- *     in the specified time range.
- * @property string mkdate database column
- * @property string chdate database column
- * @property Resource resource belongs_to Resource
+ * @property int $id database column
+ * @property string $resource_id database column
+ * @property string $user_id database column
+ * @property int $begin database column
+ * @property int $end database column
+ * @property string $perms database column
+ * @property int $mkdate database column
+ * @property int $chdate database column
+ * @property Resource $resource belongs_to Resource
+ * @property User $user belongs_to User
  */
 class ResourceTemporaryPermission extends SimpleORMap implements PrivacyObject
 {
diff --git a/lib/models/resources/Room.class.php b/lib/models/resources/Room.class.php
index 2cea825561d75d017904df5496331188d603815c..7f1668e441f210b60376ef858b87843361190810 100644
--- a/lib/models/resources/Room.class.php
+++ b/lib/models/resources/Room.class.php
@@ -3,6 +3,9 @@
 /**
  * Room.class.php - model class for a resource which is a room
  *
+ * The Room class is a derived class of the Resource class.
+ * It containts specialisations for room resources.
+ *
  * 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
@@ -15,19 +18,29 @@
  * @package     resources
  * @since       4.5
  *
- * @property string id room-ID (equal to Resource.resource_id)
- * @property Building belongs_to building
- * @property string room_type resource property
- * @property int seats resource property
- * @property bool booking_plan_is_public resource property
- *
- * Other properties are inherited from the parent class (Resource).
- */
-
-
-/**
- * The Room class is a derived class of the Resource class.
- * It containts specialisations for room resources.
+ * @property string $id database column
+ * @property string $parent_id database column
+ * @property string $category_id database column
+ * @property int|null $level database column
+ * @property string $name database column
+ * @property I18NString|null $description database column
+ * @property int $requestable database column
+ * @property int $lockable database column
+ * @property int $mkdate database column
+ * @property int $chdate database column
+ * @property int $sort_position database column
+ * @property SimpleORMapCollection|ResourceProperty[] $properties has_many ResourceProperty
+ * @property SimpleORMapCollection|ResourcePermission[] $permissions has_many ResourcePermission
+ * @property SimpleORMapCollection|ResourceRequest[] $requests has_many ResourceRequest
+ * @property SimpleORMapCollection|ResourceBooking[] $bookings has_many ResourceBooking
+ * @property SimpleORMapCollection|Resource[] $children has_many Resource
+ * @property ResourceCategory $category belongs_to ResourceCategory
+ * @property Resource $parent belongs_to Resource
+ * @property mixed $room_type additional field
+ * @property mixed $seats additional field
+ * @property mixed $booking_plan_is_public additional field
+ * @property-read mixed $building additional field
+ * @property mixed $class_name additional field
  */
 class Room extends Resource
 {
diff --git a/lib/models/resources/RoomRequest.class.php b/lib/models/resources/RoomRequest.class.php
index c0898d7a0b8630f811e26e665853140b68b2620e..6db9c38fb6a2548b0ed2e6ff12ea073a72f2900a 100644
--- a/lib/models/resources/RoomRequest.class.php
+++ b/lib/models/resources/RoomRequest.class.php
@@ -8,21 +8,37 @@
  * published by the Free Software Foundation; either version 2 of
  * the License, or (at your option) any later version.
  *
- * @param Room room Link to the Room resource (same as the resource attribute).
- * @param string seats additional field (from ResourceRequestProperty)
- * @param string booking_plan_is_public additional field
- *     (from ResourceRequestProperty)
- *
- * All other properties are inherited from the parent class (ResourceRequest).
- * @author      Cornelis Kater <ckater@gwdg.de>
- * @author      Till Glöggler <tgloeggl@uos.de>
- * @author      André Noack <noack@data-quest.de>
- * @author      Suchi & Berg GmbH <info@data-quest.de>
- * @author      Moritz Strohm <strohm@data-quest.de>
- * @license     http://www.gnu.org/licenses/gpl-2.0.html GPL version 2
- * @category    Stud.IP
- *
- *
+ * @property string $id database column
+ * @property string $course_id database column
+ * @property string $termin_id database column
+ * @property string $metadate_id database column
+ * @property string $user_id database column
+ * @property string $last_modified_by database column
+ * @property string $resource_id database column
+ * @property string|null $category_id database column
+ * @property string|null $comment database column
+ * @property string|null $reply_comment database column
+ * @property string $reply_recipients database column
+ * @property int $closed database column
+ * @property int|null $mkdate database column
+ * @property int|null $chdate database column
+ * @property int $begin database column
+ * @property int $end database column
+ * @property int $preparation_time database column
+ * @property int $marked database column
+ * @property SimpleORMapCollection|ResourceRequestProperty[] $properties has_many ResourceRequestProperty
+ * @property SimpleORMapCollection|ResourceRequestAppointment[] $appointments has_many ResourceRequestAppointment
+ * @property Room $room belongs_to Room
+ * @property Resource $resource belongs_to Resource
+ * @property ResourceCategory|null $category belongs_to ResourceCategory
+ * @property User $user belongs_to User
+ * @property User $last_modifier belongs_to User
+ * @property Course $course belongs_to Course
+ * @property SeminarCycleDate $cycle belongs_to SeminarCycleDate
+ * @property CourseDate $date belongs_to CourseDate
+ * @property mixed $seats additional field
+ * @property mixed $room_type additional field
+ * @property mixed $booking_plan_is_public additional field
  */
 class RoomRequest extends ResourceRequest
 {
diff --git a/lib/models/resources/SeparableRoom.class.php b/lib/models/resources/SeparableRoom.class.php
index 81861632a2b168fbc0766ffb29abcf9fd721b535..9ec1ccfeae3e51b310fdd64a303f8cc2d0734c71 100644
--- a/lib/models/resources/SeparableRoom.class.php
+++ b/lib/models/resources/SeparableRoom.class.php
@@ -15,13 +15,13 @@
  * @package     resources
  * @since       4.5
  *
- * @property string id database column
- * @property string building_id database column
- * @property string name database column
- * @property string mkdate database column
- * @property string chdate database column
- * @property SimpleORMapCollection building belongs_to Building
- * @property SimpleORMapCollection parts has_many SeparableRoomPart
+ * @property int $id database column
+ * @property string $building_id database column
+ * @property string $name database column
+ * @property int $mkdate database column
+ * @property int $chdate database column
+ * @property SimpleORMapCollection|SeparableRoomPart[] $parts has_many SeparableRoomPart
+ * @property Building $building belongs_to Building
  */
 
 class SeparableRoom extends SimpleORMap
diff --git a/lib/models/resources/SeparableRoomPart.class.php b/lib/models/resources/SeparableRoomPart.class.php
index a4a5fb54f400450d90da0d448e7129d9008d612e..e7e99e7249c4a131ef1996074a299e11240982ff 100644
--- a/lib/models/resources/SeparableRoomPart.class.php
+++ b/lib/models/resources/SeparableRoomPart.class.php
@@ -15,13 +15,13 @@
  * @package     resources
  * @since       4.5
  *
- * @property string id database column
- * @property string separable_room_id database column
- * @property string room_id database column
- * @property string mkdate database column
- * @property string chdate database column
- * @property SimpleORMapCollection separable_room belongs_to SeparableRoom
- * @property SimpleORMapCollection room belongs_to Room
+ * @property array $id alias for pk
+ * @property int $separable_room_id database column
+ * @property string $room_id database column
+ * @property int $mkdate database column
+ * @property int $chdate database column
+ * @property SeparableRoom $separable_room belongs_to SeparableRoom
+ * @property Room $room belongs_to Room
  */
 class SeparableRoomPart extends SimpleORMap
 {
diff --git a/lib/raumzeit/SingleDate.class.php b/lib/raumzeit/SingleDate.class.php
index b867e4d829a856224dcfddcd59d445cfbf534842..f998092442591eee51d002c4eafbe2936038b644 100644
--- a/lib/raumzeit/SingleDate.class.php
+++ b/lib/raumzeit/SingleDate.class.php
@@ -472,7 +472,7 @@ class SingleDate
     {
         $message = '';
 
-        if ($booking->booking_type == '2') {
+        if ($booking->booking_type == ResourceBooking::TYPE_LOCK) {
             $message .= sprintf(
                 _('Vom %1$s, %2$s Uhr bis zum %3$s, %4$s Uhr (Sperrzeit)') . "\n",
                 date("d.m.Y", $booking->begin),
diff --git a/lib/resources/RoomManager.class.php b/lib/resources/RoomManager.class.php
index b33ffbef1994ea9a6c1886d4a4505b97b12fc5df..515656d6b564b013a9c735d0c9515af6c1215e36 100644
--- a/lib/resources/RoomManager.class.php
+++ b/lib/resources/RoomManager.class.php
@@ -389,8 +389,18 @@ class RoomManager
         Room $room,
         DateTime $begin,
         DateTime $end,
-        $booking_types = [0, 1, 2, 3],
-        $building_booking_types = [0, 1, 2, 3],
+        $booking_types = [
+            ResourceBooking::TYPE_NORMAL,
+            ResourceBooking::TYPE_RESERVATION,
+            ResourceBooking::TYPE_LOCK,
+            ResourceBooking::TYPE_PLANNED,
+        ],
+        $building_booking_types = [
+            ResourceBooking::TYPE_NORMAL,
+            ResourceBooking::TYPE_RESERVATION,
+            ResourceBooking::TYPE_LOCK,
+            ResourceBooking::TYPE_PLANNED,
+        ],
         $exclude_canceled_intervals = true
     )
     {