diff --git a/uffd/role/views.py b/uffd/role/views.py
index a60465bf0f999fd298ef58f93473c744bf010a1f..a9453c03c9175f5f5bf61029c6e6cd4fc38cc64d 100644
--- a/uffd/role/views.py
+++ b/uffd/role/views.py
@@ -72,6 +72,12 @@ def update(roleid=False):
 def delete(roleid):
 	session = db.session
 	role = Role.query.filter_by(id=roleid).one()
+	members = role.member_ldap()
 	session.delete(role)
 	session.commit()
+	for user in members:
+		recalculate_user_groups(user)
+		if not user.to_ldap():
+			flash('updating group membership for user {} failed'.format(user.loginname))
+	session.commit()
 	return redirect(url_for('role.index'))
diff --git a/uffd/user/views_user.py b/uffd/user/views_user.py
index 5e04422cb5a2cff7edacf3a375d33e720f9d1cf6..4237b487610100839218466acb5176ef307d6959 100644
--- a/uffd/user/views_user.py
+++ b/uffd/user/views_user.py
@@ -111,8 +111,7 @@ def delete(uid):
 	user = User.from_ldap(conn.entries[0])
 
 	session = db.session
-	roles = Role.query.all()
-	for role in roles:
+	for role in Role.get_for_user(user).all():
 		if user.dn in role.member_dns():
 			role.del_member(user)