diff --git a/app/controllers/course/room_requests.php b/app/controllers/course/room_requests.php
index d3b29a9a29987a1f0086f85d0f044abdd266da3f..79758d6fa5c0c899bdd4cbdf4749a65617d8cd6e 100644
--- a/app/controllers/course/room_requests.php
+++ b/app/controllers/course/room_requests.php
@@ -20,6 +20,9 @@ class Course_RoomRequestsController extends AuthenticatedController
 {
     /**
      * Common tasks for all actions
+     *
+     * @param string $action Called action
+     * @param array  $args   Possible arguments
      */
     public function before_filter(&$action, &$args)
     {
@@ -33,22 +36,21 @@ class Course_RoomRequestsController extends AuthenticatedController
             'admin'
         );
         $this->course_id = Request::option('cid', $args[0] ?? null);
-
+        $pagetitle = '';
         //Navigation in der Veranstaltung:
         if (Navigation::hasItem('/course/admin/room_requests')) {
             Navigation::activateItem('/course/admin/room_requests');
         }
 
-        if (
-            !get_object_type($this->course_id, ['sem'])
-            || SeminarCategories::GetBySeminarId($this->course_id)->studygroup_mode
-            || !$GLOBALS['perm']->have_studip_perm('tutor', $this->course_id)
+        if (!get_object_type($this->course_id, ['sem']) ||
+            SeminarCategories::GetBySeminarId($this->course_id)->studygroup_mode ||
+            !$GLOBALS['perm']->have_studip_perm("tutor", $this->course_id)
         ) {
             throw new Trails\Exception(400);
         }
 
         PageLayout::setHelpKeyword('Basis.VeranstaltungenVerwaltenAendernVonZeitenUndTerminen');
-        $pagetitle = Course::find($this->course_id)->getFullName() . ' - ';
+        $pagetitle .= Course::find($this->course_id)->getFullName() . ' - ';
         $pagetitle .= _('Verwalten von Raumanfragen');
         PageLayout::setTitle($pagetitle);
 
@@ -103,8 +105,9 @@ class Course_RoomRequestsController extends AuthenticatedController
      */
     public function info_action($request_id)
     {
-        $this->request = RoomRequest::find($request_id);
-        $this->render_template('course/room_requests/_request.php');
+        $request = RoomRequest::find($request_id);
+        $this->request = $request;
+        $this->render_template('course/room_requests/_request.php', null);
     }
 
     /**
@@ -123,24 +126,31 @@ class Course_RoomRequestsController extends AuthenticatedController
             _('Hier können Sie Angaben zu gewünschten Raumeigenschaften machen.')
         );
 
-        $this->request_id = Request::option(
-            'request_id',
-            $request_id ?: md5(uniqid(RoomRequest::class))
-        );
+        $this->request_id = $request_id;
+
+        if (Request::submitted('request_id')) {
+            $this->request_id = Request::get('request_id');
+        }
+        if (!$this->request_id) {
+            $this->request_id = md5(uniqid('RoomRequest'));
+        }
 
         // e.g. cycle, course, date
         $this->request_range = Request::get('range_str');
 
         // multiple dates
-        $this->request_range_ids = Request::getArray('range_ids') ?: $this->fromSession('range_ids') ?? [];
+        $this->request_range_ids = Request::getArray('range_ids') ?: $_SESSION[$this->request_id]['range_ids'] ?? [];
         // a single date or whole course
         $this->request_range_id = Request::get('range_id', Context::getId());
 
-        $this->toSession('range', $this->request_range ?: $this->fromSession('range') ?? null);
-        $this->toSession('range_ids', $this->request_range_ids ?: [$this->request_range_id]);
+        $this->init_session();
+        $_SESSION[$this->request_id]['range'] = $this->request_range ?: $_SESSION[$this->request_id]['range'] ?? null;
+        $_SESSION[$this->request_id]['range_ids'] = $this->request_range_ids ?: [$this->request_range_id];
 
         // look for existing request or create a new one
-        $this->request = $this->getRequestObject($this->request_id);
+        $this->request = new RoomRequest($this->request_id);
+        // time ranges (start date, end date)
+        $this->request->setRangeFields($_SESSION[$this->request_id]['range'], $_SESSION[$this->request_id]['range_ids']);
         $this->request_time_intervals = $this->request->getTimeIntervals();
     }
 
@@ -165,20 +175,23 @@ class Course_RoomRequestsController extends AuthenticatedController
 
             $this->category_id = Request::get('category_id');
             $this->search_by_category = Request::submitted('search_by_category');
-            $this->toSession('room_category_id', $this->category_id);
+            if (!isset($_SESSION[$request_id])) {
+                $_SESSION[$request_id] = [];
+            }
+            $_SESSION[$request_id]['room_category_id'] = $this->category_id;
 
             $this->room_name = Request::get('room_name');
             $this->search_by_roomname = Request::submitted('search_by_name');
-            $this->toSession('room_name', $this->room_name);
+            $_SESSION[$request_id]['room_name'] = $this->room_name;
 
             // user selects a room category OR enters a room name
             if ($this->category_id !== null && $this->search_by_category) {
-                $this->toSession('search_by', 'category');
+                $_SESSION[$request_id]['search_by'] = 'category';
                 $this->redirect(
-                    'course/room_requests/request_find_available_properties/' . $this->request_id . '/' . $this->step
+                    'course/room_requests/request_find_available_properties/' . $this->request_id . '/' . $this->step . '/category'
                 );
             } elseif ($this->room_name && $this->search_by_roomname) {
-                $this->toSession('search_by', 'roomname');
+                $_SESSION[$request_id]['search_by'] = 'roomname';
                 $this->redirect(
                     'course/room_requests/request_find_matching_rooms/' . $this->request_id . '/' . $this->step . '/roomname'
                 );
@@ -205,14 +218,15 @@ class Course_RoomRequestsController extends AuthenticatedController
         }
         $this->request_id = $request_id;
         $this->step = (int)$step;
-        $this->room_name = $this->fromSession('room_name');
+        $this->room_name = $_SESSION[$request_id]['room_name'];
 
-        $this->request = $this->getRequestObject($this->request_id);
+        $this->request = new RoomRequest($this->request_id);
+        $this->request->setRangeFields($_SESSION[$this->request_id]['range'], $_SESSION[$this->request_id]['range_ids'] ?? []);
 
-        $search_properties = $this->fromSession('selected_properties');
+        $search_properties = $_SESSION[$request_id]['selected_properties'] ?? [];
 
-        if ($this->fromSession('room_category_id')) {
-            $search_properties['room_category_id'] = $this->fromSession('room_category_id');
+        if (!empty($_SESSION[$request_id]['room_category_id'])) {
+            $search_properties['room_category_id'] = $_SESSION[$request_id]['room_category_id'];
         }
 
         if (!empty($search_properties['seats'])) {
@@ -237,23 +251,20 @@ class Course_RoomRequestsController extends AuthenticatedController
         $this->available_room_icons = $this->getRoomBookingIcons($this->available_rooms);
 
         // selected room and its category
-        $this->selected_room = Resource::find($this->fromSession('room_id') ?: $this->request->resource_id);
+        $this->selected_room = Resource::find($_SESSION[$request_id]['room_id'] ?: $this->request->resource_id);
 
-        $this->selected_room_category_id = $this->selected_room->category_id ?? $this->fromSession('room_category_id');
+        $this->selected_room_category_id = $this->selected_room->category_id ?? $_SESSION[$request_id]['room_category_id'] ?? null;
         $this->category = $this->selected_room_category_id ? ResourceCategory::find($this->selected_room_category_id) : null;
 
-        $this->toSession('room_category_id', $this->fromSession('room_category_id') ?? $this->selected_room->category_id ?? null);
+        $_SESSION[$request_id]['room_category_id'] = $_SESSION[$request_id]['room_category_id'] ?? $this->selected_room->category_id ?? null;
 
         // after selecting a room, go to next step or stay here if no room was selected at all
         if (Request::submitted('select_room')) {
             $this->selected_room_id = Request::get('selected_room_id');
             $room = Room::find($this->selected_room_id);
-
-            $this->toSession([
-                'room_id' => $this->selected_room_id,
-                'room_category_id' => $room->category_id,
-                'select_room' => true,
-            ]);
+            $_SESSION[$request_id]['room_id'] = $this->selected_room_id;
+            $_SESSION[$request_id]['room_category_id'] = $room->category_id;
+            $_SESSION[$request_id]['select_room'] = true;
             $this->redirect(
                 'course/room_requests/request_check_properties/' . $this->request_id
             );
@@ -262,23 +273,21 @@ class Course_RoomRequestsController extends AuthenticatedController
 
         // we might also search for new rooms and stay within step 1
         else if (Request::get('room_name') && Request::submitted('search_by_name')) {
-            $this->toSession('room_name', Request::get('room_name'));
+            $_SESSION[$request_id]['room_name'] = Request::get('room_name');
             $this->redirect(
                 'course/room_requests/request_find_matching_rooms/' . $this->request_id . '/' . $this->step
             );
             return;
         }
         else if (Request::get('category_id') && Request::submitted('select_properties')) {
-            $this->toSession([
-                'search_by'        => 'category',
-                'room_category_id' => Request::get('category_id'),
-            ]);
+            $_SESSION[$request_id]['search_by'] = 'category';
+            $_SESSION[$request_id]['room_category_id'] = Request::get('category_id');
             $this->redirect(
                 'course/room_requests/request_find_available_properties/' . $this->request_id . '/' . $this->step
             );
             return;
         } else if (Request::submitted('reset_category')) {
-            $this->clearSession();
+            $this->init_session();
             $this->redirect('course/room_requests/new_request');
             return;
         }
@@ -288,38 +297,36 @@ class Course_RoomRequestsController extends AuthenticatedController
             if (!empty(Request::getArray('selected_properties'))) {
                 $this->selected_properties = Request::getArray('selected_properties');
             } else {
-                $this->selected_properties =  $this->fromSession('selected_properties');
+                $this->selected_properties =  $_SESSION[$request_id]['selected_properties'];
             }
-            $this->toSession('selected_properties', $this->selected_properties);
-            if ($this->fromSession('search_by') === 'roomname') {
-                $this->selected_properties = $this->fromSession('selected_properties');
-                $this->room = Room::find($this->fromSession('room_id'));
-                if (!isset($this->selected_properties['seats'])) {
+            $_SESSION[$request_id]['selected_properties'] = $this->selected_properties;
+            if ($_SESSION[$request_id]['search_by'] === 'roomname') {
+                $this->selected_properties = $_SESSION[$request_id]['selected_properties'] ?? null;
+                $this->room = Room::find($_SESSION[$request_id]['room_id']);
+                if (!isset($_SESSION[$request_id]['selected_properties']['seats'])) {
                     $this->selected_properties['seats'] = $this->course->admission_turnout ?? Config::get()->RESOURCES_ROOM_REQUEST_DEFAULT_SEATS;
                 }
-                $this->toSession([
-                    'selected_properties' => $this->selected_properties,
-                    'room_category_id' => $this->selected_room_category_id,
-                ]);
+                $_SESSION[$request_id]['selected_properties']['seats'] = $this->selected_properties['seats'];
+                $_SESSION[$request_id]['room_category_id'] = $this->selected_room_category_id;
             } else {
                 // let's find all the properties belonging to the selected category
-                $this->room_category_id = $this->fromSession('room_category_id');
+                $this->room_category_id = $_SESSION[$request_id]['room_category_id'];
             }
 
             if ($this->category) {
                 $this->available_properties = $this->category->getRequestableProperties();
             }
-            $this->preparation_time = $this->fromSession('preparation_time');
-            $this->comment = $this->fromSession('comment');
-            $this->request->category_id = $this->fromSession('room_category_id');
+            $this->preparation_time = $_SESSION[$request_id]['preparation_time'] ?? null;
+            $this->comment = $_SESSION[$request_id]['comment'] ?? null;
+            $this->request->category_id = $_SESSION[$request_id]['room_category_id'];
 
             // finally we want to show a summary
             if (Request::submitted('show_summary')) {
                 $this->selected_room_id = Request::get('selected_room_id');
-                $this->toSession('room_id', $this->selected_room_id);
+                $_SESSION[$request_id]['room_id'] = $this->selected_room_id;
                 $room = Room::find($this->selected_room_id);
                 if ($room) {
-                    $this->toSession('room_category_id', $room->category_id);
+                    $_SESSION[$request_id]['room_category_id'] = $room->category_id;
                 }
                 $this->redirect('course/room_requests/request_show_summary/' . $this->request_id );
             }
@@ -342,27 +349,33 @@ class Course_RoomRequestsController extends AuthenticatedController
         $this->request_id = $request_id;
         $this->step = (int)$step;
 
-        $this->request = $this->getRequestObject($this->request_id);
+        $this->request = new RoomRequest($this->request_id);
+        $this->request->setRangeFields(
+            $_SESSION[$this->request_id]['range'] ?? null,
+            $_SESSION[$this->request_id]['range_ids'] ?? null
+        );
 
         // let's find all the properties belonging to the selected category
-        $this->room_category_id = $this->fromSession('room_category_id') ?? $this->request->category_id;
-        $this->room_name = $this->fromSession('room_name');
-        $this->selected_room = Resource::find($this->fromSession('room_id') ?? $this->request->resource_id ?? null);
+        $this->room_category_id = $_SESSION[$request_id]['room_category_id'] ?: $this->request->category_id;
+        $this->room_name = $_SESSION[$request_id]['room_name'] ?? '';
+        $this->selected_room = Resource::find($_SESSION[$request_id]['room_id'] ?: $this->request->resource_id);
         $this->category = $this->room_category_id ? ResourceCategory::find($this->room_category_id) : '';
         $this->available_properties = $this->room_category_id ? $this->category->getRequestableProperties() : '';
-        $this->selected_properties = $this->fromSession('selected_properties');
+        $this->selected_properties = $_SESSION[$request_id]['selected_properties'] ?? [];
 
         $this->course = Course::find($this->course_id);
-        $this->selected_properties['seats'] = $this->fromSession('selected_properties')['seats']
+        $this->selected_properties['seats'] = $_SESSION[$request_id]['selected_properties']['seats']
             ?? $this->course->admission_turnout
             ?: Config::get()->RESOURCES_ROOM_REQUEST_DEFAULT_SEATS;
 
-        $this->preparation_time = $this->fromSession('preparation_time');
-        $this->comment = $this->fromSession('comment');
-
+        $this->preparation_time = $_SESSION[$request_id]['preparation_time'] ?? null;
+        $this->comment = $_SESSION[$request_id]['comment'] ?? null;
 
         // when searching for a room name, list found room
-        if ($this->room_name) {
+        if (
+            isset($_SESSION[$request_id]['room_name'])
+            && $_SESSION[$request_id]['room_name'] !== ''
+        ) {
             $search_properties['room_category_id'] = $this->room_category_id;
             $search_properties['seats'] = [
                 1,
@@ -404,86 +417,79 @@ class Course_RoomRequestsController extends AuthenticatedController
         if (Request::submitted('select_room')) {
             $this->selected_room_id = Request::get('selected_room_id');
             $room = Room::find($this->selected_room_id);
-            $this->toSession([
-                'room_id' => $this->selected_room_id,
-                'room_category_id' => $room->category_id,
-                'select_room' => true,
-            ]);
-
+            $_SESSION[$request_id]['room_id'] = $this->selected_room_id;
+            $_SESSION[$request_id]['room_category_id'] = $room->category_id;
+            $_SESSION[$request_id]['select_room'] = true;
+            $this->step = 2;
+            $this->request = new RoomRequest($this->request_id);
             $this->redirect(
                 'course/room_requests/request_find_matching_rooms/' . $this->request_id . '/' . $this->step
             );
         } else if (Request::get('room_name') && Request::submitted('search_by_name')) {
             $this->category_id = Request::get('category_id');
-
-            $this->toSession([
-                'selected_properties' => $this->selected_properties,
-                'room_category_id' => $this->category_id,
-                'room_name' => Request::get('room_name'),
-            ]);
+            $_SESSION[$request_id]['selected_properties'] = $this->selected_properties;
+            $_SESSION[$request_id]['room_category_id'] = $this->category_id;
+            $_SESSION[$request_id]['comment'] = $this->comment;
+            $_SESSION[$request_id]['room_name'] = Request::get('room_name');
+            $this->request = new RoomRequest($this->request_id);
             $this->redirect(
-                'course/room_requests/request_find_available_properties/' . $this->request_id . '/1'
+                'course/room_requests/request_find_available_properties/' . $this->request_id . '/1/category'
             );
 
         } else if (Request::submitted('search_rooms')) {
             $this->category_id = Request::get('category_id');
-
-            $this->toSession([
-                'room_category_id' => $this->category_id,
-                'selected_properties' => $this->selected_properties,
-                'room_name' => '',
-            ]);
+            $_SESSION[$request_id]['room_category_id'] = $this->category_id;
+            $_SESSION[$request_id]['selected_properties'] = $this->selected_properties;
+            $_SESSION[$request_id]['room_name'] = '';
 
             // no min number of seats
             if (
-                (
-                    !isset($this->selected_properties['seats'])
-                    || $this->selected_properties['seats'] < 1
-                )
-                && $this->fromSession('search_by') === 'category'
+                (!$_SESSION[$request_id]['selected_properties']['seats'] || $_SESSION[$request_id]['selected_properties']['seats'] < 1)
+                && $_SESSION[$request_id]['search_by'] === 'category'
             ) {
                 PageLayout::postError(
                     _('Die Mindestanzahl der Sitzplätze beträgt 1!')
                 );
 
                 $this->redirect(
-                    'course/room_requests/request_find_available_properties/' . $this->request_id . '/1'
+                    'course/room_requests/request_find_available_properties/' . $request_id . '/1/category'
                 );
             } else {
+                $this->step = 2;
+                $this->request = new RoomRequest($this->request_id);
                 $this->redirect(
-                        'course/room_requests/request_find_matching_rooms/' . $this->request_id . '/2'
+                        'course/room_requests/request_find_matching_rooms/' . $this->request_id . '/' . $this->step
                     );
             }
         } else if (Request::submitted('reset_category')) {
             //Delete all selected properties from the session since the category is reset
-            $this->clearSession();
+            $this->init_session();
             $this->redirect('course/room_requests/request_find_available_properties/' . $this->request_id . '/1');
         } else if (Request::submitted('search_by_category')) {
             if (Request::get('category_id') === '0') {
-                $this->clearSession('room_category_id');
+                $_SESSION[$request_id]['room_category_id'] = '';
             } else {
-                $this->toSession('room_category_id', Request::get('category_id'));
+                $_SESSION[$request_id]['room_category_id'] = Request::get('category_id');
             }
+
             $this->redirect(
-                'course/room_requests/request_find_available_properties/' . $this->request_id . '/1'
+                'course/room_requests/request_find_available_properties/' . $this->request_id . '/1'  . '/category'
             );
         } else if (Request::submitted('show_summary')) {
+            $this->request = new RoomRequest($this->request_id);
             $this->selected_room_id = Request::get('selected_room_id');
             $room = Room::find($this->selected_room_id);
-
-            $this->toSession([
-                'room_id' => $this->selected_room_id,
-                'room_category_id' => $room->category_id ?? $this->fromSession('room_category_id'),
-                'selected_properties' => $this->selected_properties,
-            ]);
-
+            $_SESSION[$request_id]['room_id'] = $this->selected_room_id;
+            $_SESSION[$request_id]['room_category_id'] = $room->category_id ?? $_SESSION[$request_id]['room_category_id'];
+            $_SESSION[$request_id]['selected_properties'] = $this->selected_properties;
             $this->redirect('course/room_requests/request_show_summary/' . $this->request_id  );
         } else {
-            $room = Room::find($this->fromSession('room_id'));
-            $this->toSession('room_category_id', $room->category_id);
-
+            $room = Room::find($_SESSION[$request_id]['room_id']);
+            $this->step = 2;
+            $this->request = new RoomRequest($this->request_id);
+            $_SESSION[$request_id]['room_category_id'] = $room->category_id;
             $this->redirect(
-                'course/room_requests/request_find_matching_rooms/' . $this->request_id . '/2'
+                'course/room_requests/request_find_matching_rooms/' . $this->request_id . '/' . $this->step
             );
         }
 
@@ -493,6 +499,8 @@ class Course_RoomRequestsController extends AuthenticatedController
      * Show a summary of all request properties before storing; we have the possibility of going back and
      * editing if necessary. This action is also used for editing a request via action menu
      * @param String $request_id ID of the request
+     * @return void
+     *
      */
     public function request_show_summary_action($request_id)
     {
@@ -506,40 +514,39 @@ class Course_RoomRequestsController extends AuthenticatedController
         $this->step = 3;
 
         if (Request::submitted('clear_cache')) {
-            $this->clearSession();
+            $_SESSION[$request_id] = [];
         }
 
-        $this->request = $this->getRequestObject($request_id);
+        $this->request = new RoomRequest($this->request_id);
+        $this->request->setRangeFields(
+            $_SESSION[$this->request_id]['range'] ?? '',
+            $_SESSION[$this->request_id]['range_ids'] ?? []
+        );
 
-        $this->selected_room_category = ResourceCategory::find($this->fromSession('room_category_id') ?? $this->request->category_id);
-        $this->selected_room = Resource::find($this->fromSession('room_id') ?? $this->request->resource_id);
+        $this->selected_room_category = ResourceCategory::find($_SESSION[$request_id]['room_category_id'] ?? $this->request->category_id);
+        $this->selected_room = Resource::find($_SESSION[$request_id]['room_id'] ?? $this->request->resource_id);
 
-        $this->room_id = $this->fromSession('room_id') ?? $this->request->resource_id;
+        $this->room_id = $_SESSION[$request_id]['room_id'] ?? $this->request->resource_id;
         $this->available_properties = $this->selected_room_category->getRequestableProperties();
 
-        $this->selected_properties = $this->fromSession('selected_properties');
+        $this->selected_properties = $_SESSION[$request_id]['selected_properties'] ?? [];
         $this->request_properties = $this->request->properties;
 
         // either properties from stored request or those from session
-        if (
-            count($this->request_properties) > 0
-            && count($this->fromSession('selected_properties')) === 0
-        ) {
+        if ($this->request_properties && empty($_SESSION[$request_id]['selected_properties'])) {
             foreach ($this->request_properties as $property) {
                 $this->selected_properties[$property->name] = $property->state;
             }
-            $this->toSession('selected_properties', $this->selected_properties);
+            $_SESSION[$request_id]['selected_properties'] = $this->selected_properties;
         }
 
         $this->preparation_time = intval($this->request->preparation_time / 60);
         $this->reply_lecturers = $this->request->reply_recipients === ResourceRequest::REPLY_LECTURER;
         $this->comment = $this->request->comment;
 
-        $this->toSession([
-            'search_by' => $this->selected_room ? 'roomname' : 'category',
-            'room_category_id' => $this->selected_room_category->id,
-            'room_id' => $this->selected_room->id ?? null,
-        ]);
+        $_SESSION[$request_id]['search_by'] = $this->selected_room ? 'roomname' : 'category';
+        $_SESSION[$request_id]['room_category_id'] = $this->selected_room_category->id;
+        $_SESSION[$request_id]['room_id'] = $this->selected_room ? $this->selected_room->id : '';
     }
 
     public function store_request_action($request_id)
@@ -551,11 +558,16 @@ class Course_RoomRequestsController extends AuthenticatedController
         }
 
         $this->request_id = $request_id;
-        $this->request = $this->getRequestObject($this->request_id);
+        $this->request = new RoomRequest($this->request_id);
+        $this->request->setRangeFields($_SESSION[$this->request_id]['range'], $_SESSION[$this->request_id]['range_ids']);
 
         if (Request::isPost()) {
             CSRFProtection::verifyUnsafeRequest();
 
+            if ($this->request->isNew()) {
+                $this->request->user_id = $this->current_user->id;
+            }
+
             $this->preparation_time = Request::int('preparation_time', 0);
             $this->request->preparation_time = $this->preparation_time * 60;
             $this->request->comment = Request::get('comment');
@@ -565,10 +577,11 @@ class Course_RoomRequestsController extends AuthenticatedController
             } else {
                 $this->request->reply_recipients = ResourceRequest::REPLY_REQUESTER;
             }
-            $this->request->category_id = $this->fromSession('room_category_id') ?? $this->request->category_id;
+            $this->request->category_id = $_SESSION[$request_id]['room_category_id'] ?: $this->request->category_id;
 
-            $this->request->resource_id = $this->fromSession('room_id') ?? $this->request->resource_id;
+            $this->request->resource_id = $_SESSION[$request_id]['room_id'] ?: $this->request->resource_id;
             $this->request->course_id = Context::getId();
+            $this->request->last_modified_by = $this->current_user->id;
 
             if ($this->request->closed != ResourceRequest::STATE_OPEN) {
                 PageLayout::postInfo(_('Die Raumanfrage wurde wieder geöffnet und damit erneut gestellt.'));
@@ -578,14 +591,16 @@ class Course_RoomRequestsController extends AuthenticatedController
             $this->request->store();
 
             //Store the properties:
-            foreach ($this->fromSession('selected_properties') as $name => $state) {
-                if (!empty($state)) {
-                    $this->request->setProperty($name, $state);
+            if (isset($_SESSION[$request_id]['selected_properties'])) {
+                foreach ($_SESSION[$request_id]['selected_properties'] as $name => $state) {
+                    if (!empty($state)) {
+                        $this->request->setProperty($name, $state);
+                    }
                 }
             }
 
             // once stored, we can delete the session data for this request
-            $this->clearSession();
+            $_SESSION[$this->request_id] = [];
 
             PageLayout::postSuccess(_('Die Anfrage wurde gespeichert!'));
             $this->relocate('course/timesrooms/');
@@ -636,77 +651,39 @@ class Course_RoomRequestsController extends AuthenticatedController
     /**
      * delete one room request
      */
-    public function delete_action(RoomRequest $request)
+    public function delete_action($request_id)
     {
+        $request = RoomRequest::find($request_id);
+        if (!$request) {
+            throw new Trails\Exception(403);
+        }
         if (Request::isGet()) {
-            PageLayout::postQuestion(
-                sprintf(
-                    _('Möchten Sie die Raumanfrage "%s" löschen?'),
-                    htmlReady($request->getTypeString())
-                ),
-                $this->url_for('course/room_requests/delete/' . $request->id)
-            );
+            PageLayout::postQuestion(sprintf(
+                _('Möchten Sie die Raumanfrage "%s" löschen?'),
+                htmlReady($request->getTypeString())), $this->url_for('course/room_requests/delete/' . $request_id));
         } else {
             CSRFProtection::verifyUnsafeRequest();
-            if (Request::submitted('yes') && $request->delete()) {
-                PageLayout::postSuccess("Die Raumanfrage wurde gelöscht.");
+            if (Request::submitted('yes')) {
+                if ($request->delete()) {
+                    PageLayout::postSuccess("Die Raumanfrage wurde gelöscht.");
+                }
             }
         }
         $this->redirect('course/timesrooms/index');
     }
 
-
-    private function fromSession(string $key): mixed
-    {
-        if (!isset($this->request_id)) {
-            throw new RuntimeException('Request ID not set.');
-        }
-
-        $defaults = [
-            'range_ids'           => [],
-            'select_room'         => false,
-            'selected_properties' => [],
-        ];
-        return $_SESSION[$this->request_id][$key] ?? $defaults[$key] ?? null;
-    }
-
-    private function toSession(array|string $data, mixed $value = null): void
-    {
-        if (!isset($this->request_id)) {
-            throw new RuntimeException('Request ID not set.');
-        }
-
-        if (!is_array($data) && func_num_args() === 2) {
-            $data = [$data => $value];
-        }
-
-        foreach ($data as $key => $value) {
-            $_SESSION[$this->request_id][$key] = $value;
-        }
-    }
-
-    private function clearSession(string $key = null): void
-    {
-        if (!isset($this->request_id)) {
-            throw new RuntimeException('Request ID not set.');
-        }
-
-        if ($key === null) {
-            unset($_SESSION[$this->request_id]);
-        } elseif (isset($_SESSION[$this->request_id][$key])) {
-            unset($_SESSION[$this->request_id][$key]);
-        }
-    }
-
-    private function getRequestObject(?string $request_id): RoomRequest
+    private function init_session()
     {
-        $request = new RoomRequest($request_id);
-
-        $request->setRangeFields(
-            $this->fromSession('range'),
-            $this->fromSession('range_ids')
+        $_SESSION[$this->request_id] = array_merge(
+            $_SESSION[$this->request_id] ?? [],
+            [
+                'search_by'           => '',
+                'room_category_id'    => '',
+                'room_id'             => '',
+                'room_name'           => '',
+                'select_room'         => false,
+                'selected_properties' => [],
+            ]
         );
-
-        return $request;
     }
 }
diff --git a/app/controllers/resources/room_request.php b/app/controllers/resources/room_request.php
index 113c5d3176b71d091a19216a1cc96fe1247dc861..7f7cdbe2b3ea11f5a5bfb070afc2393e1d617375 100644
--- a/app/controllers/resources/room_request.php
+++ b/app/controllers/resources/room_request.php
@@ -1816,6 +1816,7 @@ class Resources_RoomRequestController extends AuthenticatedController
                 $this->reply_comment = Request::get('reply_comment');
                 $this->request->reply_comment = $this->reply_comment;
                 $this->request->closed = '3';
+                $this->request->last_modified_by = $this->current_user->id;
                 if ($this->request->isDirty()) {
                     if ($this->request->store()) {
                         $this->show_form = false;
diff --git a/lib/models/resources/ResourceRequest.php b/lib/models/resources/ResourceRequest.php
index b0334a4097886062d9438608325b0bac041ffdc8..ed10e6912e633077f55bde346dd61b77e684fe8b 100644
--- a/lib/models/resources/ResourceRequest.php
+++ b/lib/models/resources/ResourceRequest.php
@@ -134,7 +134,6 @@ class ResourceRequest extends SimpleORMap implements PrivacyObject, Studip\Calen
             $config['registered_callbacks']['before_store'][] = 'validate';
         }
         $config['registered_callbacks']['after_create'][] = 'cbLogNewRequest';
-        $config['registered_callbacks']['before_store'][] = 'cbBeforeStore';
         $config['registered_callbacks']['after_store'][] = 'cbAfterStore';
         $config['registered_callbacks']['after_delete'][] = 'cbAfterDelete';
 
@@ -547,18 +546,6 @@ class ResourceRequest extends SimpleORMap implements PrivacyObject, Studip\Calen
         StudipLog::log('RES_REQUEST_NEW', $this->course_id, $this->resource_id, $this->getLoggingInfoText());
     }
 
-    /**
-     * A callback method that sets the users connection before store.
-     */
-    public function cbBeforeStore()
-    {
-        if ($this->isNew() && !$this->user_id) {
-            $this->user_id = User::findCurrent()->id;
-        }
-
-        $this->last_modified_by = User::findCurrent()->id;
-    }
-
     /**
      * A callback method that send a mail
      * when a new request has been udpated.