diff --git a/app/controllers/admin/user.php b/app/controllers/admin/user.php
index 7b51050b583cef8c060f192e9367bd115a87aa62..0fcc493911d7fcc0136ef852059eb671016b0c37 100644
--- a/app/controllers/admin/user.php
+++ b/app/controllers/admin/user.php
@@ -273,12 +273,13 @@ class Admin_UserController extends AuthenticatedController
      */
     public function delete_action($user_id = null, $parent = '')
     {
-        $delete_documents           = (bool) Request::int('documents');
-        $delete_content_from_course = (bool) Request::int('coursecontent');
-        $delete_personal_documents  = (bool) Request::int('personaldocuments');
-        $delete_personal_content    = (bool) Request::int('personalcontent');
-        $delete_names               = (bool) Request::int('personalnames');
-        $delete_memberships         = (bool) Request::int('memberships');
+        $delete_documents           = Request::bool('documents');
+        $delete_courseware          = Request::bool('courseware');
+        $delete_content_from_course = Request::bool('coursecontent');
+        $delete_personal_documents  = Request::bool('personaldocuments');
+        $delete_personal_content    = Request::bool('personalcontent');
+        $delete_names               = Request::bool('personalnames');
+        $delete_memberships         = Request::bool('memberships');
 
         //deleting one user
         if (!is_null($user_id)) {
@@ -305,7 +306,7 @@ class Admin_UserController extends AuthenticatedController
                 $umanager->getFromDatabase($user_id);
 
                 //delete
-                if ($umanager->deleteUser($delete_documents, $delete_content_from_course, $delete_personal_documents, $delete_personal_content, $delete_names, $delete_memberships)) {
+                if ($umanager->deleteUser($delete_documents, $delete_content_from_course, $delete_personal_documents, $delete_personal_content, $delete_names, $delete_memberships, $delete_courseware)) {
                     $details = explode('§', str_replace(['msg§', 'info§', 'error§'], '', mb_substr($umanager->msg, 0, -1)));
                     PageLayout::postSuccess(htmlReady(sprintf(_('"%s (%s)" wurde erfolgreich gelöscht.'), $user->getFullName(), $user->username)), $details);
                 } else {
diff --git a/app/views/admin/user/_delete.php b/app/views/admin/user/_delete.php
index 59c5fc1894b98f3a3307f1b138b8bbcdefcdf7c2..d0e89aa294c70adaaefcf20cc71104e83f5094ed 100644
--- a/app/views/admin/user/_delete.php
+++ b/app/views/admin/user/_delete.php
@@ -51,6 +51,12 @@
             <?= tooltipHtmlIcon(_('Dateien in Veranstaltungen und Einrichtungen')) ?>
         </label>
 
+        <label>
+            <input type="checkbox" id="courseware" name="courseware" value="1" checked>
+            <?= _('Lernmaterialien löschen?') ?>
+            <?= tooltipHtmlIcon(_('Courseware Lernmaterialien, Seiten, Abschnitte und Blöcke')) ?>
+        </label>
+
         <label>
             <input type="checkbox" id="coursecontent" name="coursecontent" value="1" checked>
             <?= _('Andere Inhalte löschen?') ?>
diff --git a/lib/classes/UserManagement.class.php b/lib/classes/UserManagement.class.php
index 0accf82db4f7b325d7320a3a9427e4d406c55a2c..498036e2f7dd23026600bab97e1f4e19524d7946 100644
--- a/lib/classes/UserManagement.class.php
+++ b/lib/classes/UserManagement.class.php
@@ -789,10 +789,18 @@ class UserManagement
     * @param    bool delete all personal content belonging to the user
     * @param    bool delete all names identifying the user
     * @param    bool delete all memberships of the user
+    * @param    bool delete all courseware of the user
     * @return   bool Removal successful?
     */
-    public function deleteUser($delete_documents = true, $delete_content_from_course = true, $delete_personal_documents = true, $delete_personal_content = true, $delete_names = true, $delete_memberships = true)
-    {
+    public function deleteUser(
+        bool $delete_documents = true,
+        bool $delete_content_from_course = true,
+        bool $delete_personal_documents = true,
+        bool $delete_personal_content = true,
+        bool $delete_names = true,
+        bool $delete_memberships = true,
+        bool $delete_courseware = true
+    ): bool {
         global $perm;
 
         // Do we have permission to do so?
@@ -974,6 +982,24 @@ class UserManagement
             NotificationCenter::postNotification('UserDataDidRemove', $this->user_data['auth_user_md5.user_id'], 'course_documents');
         }
 
+        // always delete personal courseware elements of this user
+        \Courseware\Unit::deleteBySQL('range_id = ?', [$this->user_data['auth_user_md5.user_id']]);
+        \Courseware\UserDataField::deleteBySQL('user_id = ?', [$this->user_data['auth_user_md5.user_id']]);
+        \Courseware\UserProgress::deleteBySQL('user_id = ?', [$this->user_data['auth_user_md5.user_id']]);
+        \Courseware\Bookmark::deleteBySQL('user_id = ?', [$this->user_data['auth_user_md5.user_id']]);
+
+        // delete courseware elements in courses of this user
+        if ($delete_courseware) {
+            \Courseware\Unit::deleteBySQL('creator_id = ?', [$this->user_data['auth_user_md5.user_id']]);
+            \Courseware\StructuralElement::deleteBySQL('owner_id = ?', [$this->user_data['auth_user_md5.user_id']]);
+            \Courseware\StructuralElementFeedback::deleteBySQL('user_id = ?', [$this->user_data['auth_user_md5.user_id']]);
+            \Courseware\StructuralElementComment::deleteBySQL('user_id = ?', [$this->user_data['auth_user_md5.user_id']]);
+            \Courseware\Container::deleteBySQL('owner_id = ?', [$this->user_data['auth_user_md5.user_id']]);
+            \Courseware\Block::deleteBySQL('owner_id = ?', [$this->user_data['auth_user_md5.user_id']]);
+            \Courseware\BlockFeedback::deleteBySQL('user_id = ?', [$this->user_data['auth_user_md5.user_id']]);
+            \Courseware\BlockComment::deleteBySQL('user_id = ?', [$this->user_data['auth_user_md5.user_id']]);
+        }
+
         // delete all remaining user data in course context if option selected
         if ($delete_content_from_course) {
             $queries = [
diff --git a/lib/models/User.class.php b/lib/models/User.class.php
index aa6f5feca679da570b9b9ff9232245309b84801f..5d246b0baf00d60fa418c23c302673e7b6c679f6 100644
--- a/lib/models/User.class.php
+++ b/lib/models/User.class.php
@@ -190,12 +190,6 @@ class User extends AuthUserMd5 implements Range, PrivacyObject
             'order_by'          => 'ORDER BY name',
         ];
 
-        $config['has_one']['courseware_units'] = [
-            'class_name' => \Courseware\Unit::class,
-            'assoc_foreign_key' => 'range_id',
-            'on_delete'  => 'delete',
-        ];
-
         $config['has_many']['course_notifications'] = [
             'class_name'        => CourseMemberNotification::class,
             'on_delete'         => 'delete',