private IPolicyObjectCollection<IPolicyObject> FilterConditions(ConditionLogic logic, IPolicyObjectCollection<IPolicyObject> conditions)
        {
            if (null == conditions)
                return null;

            IPolicyObjectCollection<IPolicyObject> reducedConditions = new PolicyObjectCollection<IPolicyObject>();

            foreach (IPolicyObject policyObject in conditions)
            {
                if (ConditionContainsFilter(policyObject as ICondition))
                {
                    reducedConditions.Add((policyObject as Condition).DeepCopy(policyObject.ReadOnly, true));
                }
                else if(policyObject is IConditionGroup)
                {
                    IConditionGroup conditionGroup = policyObject as IConditionGroup;
                    ConditionGroup reducedConditionGroup = new ConditionGroup(Guid.NewGuid(), conditionGroup.Name, conditionGroup.Logic, conditionGroup.ExitOnFirstPass);
                    reducedConditionGroup.AddConditions(FilterConditions(conditionGroup.Logic, conditionGroup.Conditions));

                    if (0 != reducedConditionGroup.Conditions.Count)
                    {
                        reducedConditions.Add(reducedConditionGroup);
                    }
                }
            }

            return reducedConditions;
        }