void WorkerDoWork(object sender, DoWorkEventArgs e)
        {
            var worker = (BackgroundWorker)sender;

            foreach (var role in settings.SelectedRoles)
            {
                try
                {
                    worker.ReportProgress(1, string.Format("Retrieving privileges set for role \"{0}\"...", role["name"]));
                    var rolePrivileges = rManager.GetPrivilegesForRole(role.Id);

                    foreach (var pAction in settings.Actions)
                    {
                        if (pAction.Level == PrivilegeLevel.None)
                        {
                            worker.ReportProgress(1, string.Format("Removing privilege \"{0}\" from role \"{1}\"...", pAction.PrivilegeName, role["name"]));
                            rManager.RemovePrivilegeFromRole(rolePrivileges, pAction.PrivilegeId);
                        }
                        else
                        {
                            worker.ReportProgress(1, string.Format("Adding/Updating privilege \"{0}\" in role \"{1}\"...", pAction.PrivilegeName, role["name"]));
                            rManager.AddPrivilegeToRole(rolePrivileges, pAction);
                        }
                    }

                    worker.ReportProgress(1, string.Format("Replacing privileges set for role \"{0}\"...", role["name"]));
                    rManager.ApplyChanges(rolePrivileges, role.Id);
                }
                catch (Exception error)
                {
                    CommonDelegates.DisplayMessageBox(ParentForm,
                                                      "Error while updating role " + role["name"] + ": " + error.Message,
                                                      "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
        }