diff --git a/plugins/personal/roles/class_userRoles.inc b/plugins/personal/roles/class_userRoles.inc
index e4e95f9b261b1b5552c9d73a453ef34ae56c51f9..80b7f5ceab93ccbe9c1a6ed62cc473509f95d887 100644
--- a/plugins/personal/roles/class_userRoles.inc
+++ b/plugins/personal/roles/class_userRoles.inc
@@ -171,27 +171,66 @@ class userRoles extends simplePlugin
     return FALSE;
   }
 
+  /*! \brief This function removes the object from LDAP
+   */
+  function remove (bool $fulldelete = FALSE): array
+  {
+    if (!$fulldelete) {
+      /* We are not deleting the object it's just that there are no groups left
+       * Make sure memberships are empty to avoid surprises and call save. */
+      $this->rolesMembership  = [];
+      $this->groupsMembership = [];
+      return $this->save();
+    } else {
+      return parent::remove($fulldelete);
+    }
+  }
+
   protected function ldap_remove (): array
   {
     if ($this->is_template) {
       return parent::ldap_remove();
     } elseif (($this->dn != '') && ($this->dn != 'new')) {
       /* Remove all groups */
-      foreach ($this->savedGroupsMembership as $ogroupdn) {
+      foreach ($this->savedGroupsMembership as $key => $ogroupdn) {
         try {
           $g = objects::open($ogroupdn, 'ogroup');
           $g->getBaseObject()->attributesAccess['member']->searchAndRemove($this->dn);
-          $g->save();
+          $msg = $g->save();
+          if (empty($msg)) {
+            unset($this->savedGroupsMembership[$key]);
+          } else {
+            /* We do not prevent user deletion on error, but still warn the user */
+            foreach ($msg as $error) {
+              msg_dialog::display(
+                _('Warning'),
+                sprintf(_('Could not remove membership to group %s: %s'), $ogroupdn, $error),
+                WARNING_DIALOG
+              );
+            }
+          }
         } catch (NonExistingLdapNodeException $e) {
           /* Ignore deleted groups */
         }
       }
       /* Remove all roles */
-      foreach ($this->savedRolesMembership as $roledn) {
+      foreach ($this->savedRolesMembership as $key => $roledn) {
         try {
           $r = objects::open($roledn, 'role');
           $r->getBaseObject()->attributesAccess['roleOccupant']->searchAndRemove($this->dn);
-          $r->save();
+          $msg = $r->save();
+          if (empty($msg)) {
+            unset($this->savedRolesMembership[$key]);
+          } else {
+            /* We do not prevent user deletion on error, but still warn the user */
+            foreach ($msg as $error) {
+              msg_dialog::display(
+                _('Warning'),
+                sprintf(_('Could not remove membership to role %s: %s'), $roledn, $error),
+                WARNING_DIALOG
+              );
+            }
+          }
         } catch (NonExistingLdapNodeException $e) {
           /* Ignore deleted roles */
         }
@@ -271,7 +310,9 @@ class userRoles extends simplePlugin
             if (empty($msg)) {
               $this->savedGroupsMembership[] = $ogroupdn;
             } else {
-              $errors = array_merge($errors, $msg);
+              foreach ($msg as $error) {
+                $errors[] = sprintf(_('Could not add membership to group %s: %s'), $ogroupdn, $error);
+              }
             }
           } catch (NonExistingLdapNodeException $e) {
             $errors[] = $e->getMessage();
@@ -293,7 +334,9 @@ class userRoles extends simplePlugin
             if (empty($msg)) {
               unset($this->savedGroupsMembership[$key]);
             } else {
-              $errors = array_merge($errors, $msg);
+              foreach ($msg as $error) {
+                $errors[] = sprintf(_('Could not remove membership to group %s: %s'), $ogroupdn, $error);
+              }
             }
           } catch (NonExistingLdapNodeException $e) {
             $errors[] = $e->getMessage();
@@ -316,7 +359,9 @@ class userRoles extends simplePlugin
             if (empty($msg)) {
               $this->savedRolesMembership[] = $roledn;
             } else {
-              $errors = array_merge($errors, $msg);
+              foreach ($msg as $error) {
+                $errors[] = sprintf(_('Could not add membership to role %s: %s'), $roledn, $error);
+              }
             }
           } catch (NonExistingLdapNodeException $e) {
             $errors[] = $e->getMessage();
@@ -338,7 +383,9 @@ class userRoles extends simplePlugin
             if (empty($msg)) {
               unset($this->savedRolesMembership[$key]);
             } else {
-              $errors = array_merge($errors, $msg);
+              foreach ($msg as $error) {
+                $errors[] = sprintf(_('Could not remove membership to role %s: %s'), $roledn, $error);
+              }
             }
           } catch (NonExistingLdapNodeException $e) {
             $errors[] = $e->getMessage();