private void GetMemberChangesFromCSEntryChange(CSEntryChange csentry, out GroupMembership adds, out GroupMembership deletes, out GroupMembership reportedAdds, out GroupMembership reportedDeletes, out IList <Member> roleChanges, bool replacing)
        {
            adds            = new GroupMembership();
            deletes         = new GroupMembership();
            reportedAdds    = new GroupMembership();
            reportedDeletes = new GroupMembership();
            roleChanges     = new List <Member>();

            GroupMembership existingGroupMembership;
            bool            hasExistingMembership = false;

            if (replacing | this.ExistingMembershipRequiredForUpdate(csentry))
            {
                existingGroupMembership = this.config.GroupsService.MemberFactory.GetMembership(csentry.DN);
                hasExistingMembership   = true;
            }
            else
            {
                existingGroupMembership = new GroupMembership();
            }

            this.GetMemberChangesFromCSEntryChange(csentry, adds.Members, deletes.Members, existingGroupMembership.Members, this.config.GroupMemberAttributeName, replacing);
            this.GetMemberChangesFromCSEntryChange(csentry, adds.ExternalMembers, deletes.ExternalMembers, existingGroupMembership.ExternalMembers, "externalMember", replacing);
            this.GetMemberChangesFromCSEntryChange(csentry, adds.Managers, deletes.Managers, existingGroupMembership.Managers, this.config.GroupManagerAttributeName, replacing);
            this.GetMemberChangesFromCSEntryChange(csentry, adds.ExternalManagers, deletes.ExternalManagers, existingGroupMembership.ExternalManagers, "externalManager", replacing);
            this.GetMemberChangesFromCSEntryChange(csentry, adds.Owners, deletes.Owners, existingGroupMembership.Owners, this.config.GroupOwnerAttributeName, replacing);
            this.GetMemberChangesFromCSEntryChange(csentry, adds.ExternalOwners, deletes.ExternalOwners, existingGroupMembership.ExternalOwners, "externalOwner", replacing);

            if (hasExistingMembership && this.config.InheritGroupRoles)
            {
                this.ApplyRoleChanges(adds, deletes, out reportedAdds, out reportedDeletes, out roleChanges);
            }

            reportedAdds.MergeMembership(adds);
            reportedDeletes.MergeMembership(deletes);
        }