diff --git a/app/controllers/course/members.php b/app/controllers/course/members.php
index fd650772b8425cbeaafc6d322cb2d38f7dcb080a..1c492d691b7458db2935c66c50f6d0786063a610 100644
--- a/app/controllers/course/members.php
+++ b/app/controllers/course/members.php
@@ -1119,12 +1119,9 @@ class Course_MembersController extends AuthenticatedController
 
     /**
      * Cancel the subscription of a selected user or group of users
-     * @param String $cmd
-     * @param String $status
-     * @param String $user_id
      * @throws AccessDeniedException
      */
-    public function cancel_subscription_action($cmd, $status, $user_id = null)
+    public function cancel_subscription_action(string $cmd, string $status, ?string $user_id = null)
     {
         if (!$this->is_tutor) {
             throw new AccessDeniedException();
@@ -1134,22 +1131,31 @@ class Course_MembersController extends AuthenticatedController
         if (!Request::submitted('no')) {
             if (Request::submitted('yes')) {
                 CSRFProtection::verifyUnsafeRequest();
-                $users = Request::getArray('users');
+
+                $user_ids = Request::optionArray('users');
 
                 if (!$this->is_dozent) {
-                    $this->validateTutorPermission($users, $this->course_id);
+                    $this->validateTutorPermission($user_ids, $this->course_id);
                 }
+
+                $users = User::findMany($user_ids);
+
                 if (!empty($users)) {
                     $removed_users = [];
                     $errors = [];
                     if (in_array($status, words('accepted awaiting claiming'))) {
                         foreach ($users as $user) {
-                            $course->removePreliminaryMember($user);
+                            try {
+                                $course->removePreliminaryMember($user);
+                                $removed_users[] = $user->getFullName();
+                            } catch (Exception $e) {
+                                $errors[] = $e->getMessage();
+                            }
                         }
                     } else {
                         foreach ($users as $user) {
                             try {
-                                $course->cancelSubscription($user);
+                                $course->deleteMember($user);
                                 $removed_users[] = $user->getFullName();
                             } catch (Exception $e) {
                                 $errors[] = $e->getMessage();
@@ -1164,33 +1170,16 @@ class Course_MembersController extends AuthenticatedController
                         );
                     }
                     if (count($removed_users) > 5) {
-                        PageLayout::postSuccess(
+                        PageLayout::postSuccess(sprintf(
                             _('%u Personen wurden ausgetragen.'),
                             count($removed_users)
-                        );
+                        ));
                     } elseif (count($removed_users) > 0) {
                         PageLayout::postSuccess(
                             _('Die folgenden Personen wurden ausgetragen:'),
                             $removed_users
                         );
                     }
-
-                    // deleted authors
-                    if (!empty($msgs)) {
-                        if (count($msgs) <= 5) {
-                            PageLayout::postSuccess(sprintf(
-                                _("%s %s wurde aus der Veranstaltung ausgetragen."),
-                                htmlReady($this->status_groups[$status]),
-                                htmlReady(join(', ', $msgs))
-                            ));
-                        } else {
-                            PageLayout::postSuccess(sprintf(
-                                _("%u %s wurden aus der Veranstaltung entfernt."),
-                                count($msgs),
-                                htmlReady($this->status_groups[$status])
-                            ));
-                        }
-                    }
                 } else {
                     PageLayout::postWarning(sprintf(
                         _('Sie haben keine %s zum Austragen ausgewählt'),
diff --git a/lib/models/Course.php b/lib/models/Course.php
index b51db088506d7e1c5de98722576057eb0acf2361..d736725d17bdd330b0ff674beef8e0242712e43f 100644
--- a/lib/models/Course.php
+++ b/lib/models/Course.php
@@ -1215,10 +1215,7 @@ class Course extends SimpleORMap implements Range, PrivacyObject, StudipItem, Fe
      */
     public function deleteMember(User $user, bool $send_mail = false) : void
     {
-        $membership = CourseMember::findOneBySQL(
-            'seminar_id = :course_id AND user_id = :user_id',
-            ['course_id' => $this->id, 'user_id' => $user->id]
-        );
+        $membership = CourseMember::find([$this->id, $user->id]);
         if (!$membership) {
             //The user is not a member of the course.
             throw new \Studip\MembershipException(
@@ -1262,9 +1259,6 @@ class Course extends SimpleORMap implements Range, PrivacyObject, StudipItem, Fe
             );
         }
 
-        $removed_from_parent   = false;
-        $removed_from_children = false;
-
         if ($this->parent_course) {
             //This course has a parent course.
             //Delete the user from the parent course if they are not part of
@@ -1276,14 +1270,13 @@ class Course extends SimpleORMap implements Range, PrivacyObject, StudipItem, Fe
                    AND `seminar_id` <> :this_course_id',
                 [
                     'user_id'          => $user->id,
-                    'parent_course_id' => $this->parent_course->id,
+                    'parent_course_id' => $this->parent->id,
                     'this_course_id'   => $this->id
                 ]
             );
             if ($other_memberships === 0) {
                 //No other memberships. We can delete the user from the parent course.
-                $this->parent_course->deleteMember($user, false);
-                $removed_from_parent = true;
+                $this->parent->deleteMember($user);
             }
         }
 
@@ -1294,7 +1287,6 @@ class Course extends SimpleORMap implements Range, PrivacyObject, StudipItem, Fe
             foreach ($this->children as $child) {
                 $child->deleteMember($user);
             }
-            $removed_from_children = true;
         }
 
         if ($send_mail) {
@@ -1344,7 +1336,7 @@ class Course extends SimpleORMap implements Range, PrivacyObject, StudipItem, Fe
                            AND `seminar_user`.`status` = 'dozent'",
                         ['deleted_user_id' => $user->id]
                     );
-                    if ($other_deputy_amount === 0 && $GLOBALS['user']->id != $deputy_duty->user_id) {
+                    if ($other_deputy_amount === 0 && $GLOBALS['user']->id !== $deputy_duty->user_id) {
                         Deputy::deleteBySQL(
                             '`range_id` = :course_id AND `user_id` = :deputy_id',
                             ['course_id' => $this->id, $deputy_duty->user_id]
@@ -1370,8 +1362,6 @@ class Course extends SimpleORMap implements Range, PrivacyObject, StudipItem, Fe
         StudipLog::log('SEM_USER_DEL', $this->id, $user->id, 'Wurde aus der Veranstaltung entfernt');
 
         $this->resetRelation('members');
-
-        //At this point, removal is complete.
     }
 
     /**