diff --git a/db/migrations/5.3.19_cleanup_admission_seminar_user.php b/db/migrations/5.3.19_cleanup_admission_seminar_user.php
new file mode 100644
index 0000000000000000000000000000000000000000..94b5cc852a7e3ed154f7bad36a949d5ddc570ad7
--- /dev/null
+++ b/db/migrations/5.3.19_cleanup_admission_seminar_user.php
@@ -0,0 +1,48 @@
+<?php
+
+/**
+ * @see https://gitlab.studip.de/studip/studip/-/issues/2441
+ */
+final class CleanupAdmissionSeminarUser extends Migration
+{
+    public function description()
+    {
+        return 'Removes entries from table admission_seminar_user that are '
+             . 'already in table seminar_user';
+    }
+
+    protected function up()
+    {
+        // Fetch affected course ids
+        $query = "SELECT DISTINCT `seminar_id`
+                  FROM `admission_seminar_user`
+                  JOIN `seminar_user` USING (`seminar_id`, `user_id`)";
+        $course_ids = DBManager::get()->fetchFirst($query);
+
+        // Remove all entries that are already in seminar_user
+        $query = "DELETE `admission_seminar_user`
+                  FROM `admission_seminar_user`
+                  JOIN `seminar_user` USING (`seminar_id`, `user_id`)";
+        DBManager::get()->exec($query);
+
+        // Adjust positions in admission_seminar_user for all affected courses
+        foreach ($course_ids as $course_id) {
+            $query = "SELECT `user_id`
+                      FROM `admission_seminar_user`
+                      WHERE `seminar_id` = ? AND status = 'awaiting'
+                      ORDER BY `position`";
+            $user_ids = DBManager::get()->fetchFirst($query, [$course_id]);
+
+            foreach ($user_ids as $index => $user_id) {
+                $query = "UPDATE `admission_seminar_user`
+                          SET `position` = ?
+                          WHERE `seminar_id` = ? AND `user_id` = ?";
+                DBManager::get()->execute($query, [
+                    $index + 1,
+                    $course_id,
+                    $user_id
+                ]);
+            }
+        }
+    }
+}
diff --git a/lib/models/CourseMember.class.php b/lib/models/CourseMember.class.php
index dc3a8fb993031112db1f78b332c155bc5257f8b0..e905d4b68066ea1ccf544285408f60333774eaa4 100644
--- a/lib/models/CourseMember.class.php
+++ b/lib/models/CourseMember.class.php
@@ -380,12 +380,8 @@ class CourseMember extends SimpleORMap implements PrivacyObject
         $admission_comment = '';
         $mkdate = time();
 
-        $admission_user = AdmissionApplication::find([$seminar_id, $user_id]);
+        $admission_user = AdmissionApplication::find([$user_id, $seminar_id]);
         if ($admission_user) {
-            // copy the studycourse from admission_seminar_user
-            if ($copy_studycourse && $admission_user->studiengang_id) {
-                $contingent = $admission_user->studiengang_id;
-            }
             $admission_status = $admission_user->status;
             $admission_comment = $admission_user->comment ?? '';
             $mkdate = $admission_user->mkdate;