private bool ModFilter(object item)
        {
            TroveModViewModel mod = item as TroveModViewModel;
            var ic = StringComparison.OrdinalIgnoreCase;

            bool search = true, types = true, subtypes = true, format = true;

            try
            {
                search = string.IsNullOrEmpty(SearchFilter) || mod.DataObject.Name?.IndexOf(SearchFilter, ic) >= 0 || mod.DataObject.Author?.IndexOf(SearchFilter, ic) >= 0 ||
                         mod.DataObject.Type?.IndexOf(SearchFilter, ic) >= 0 || mod.DataObject.SubType?.IndexOf(SearchFilter, ic) >= 0;

                types = string.IsNullOrEmpty(TypeFilter) || TypeFilter.Equals(Strings.GetMoreModsViewModel_AllTypes, ic) ||
                        mod.DataObject.Type == null || mod.DataObject.Type.Equals(TypeFilter, ic);

                subtypes = string.IsNullOrEmpty(SubTypeFilter) || SubTypeFilter.Equals(Strings.GetMoreModsViewModel_AllSubTypes, ic) ||
                           mod.DataObject.SubType == null || mod.DataObject.SubType.Equals(SubTypeFilter, ic);

                format = string.IsNullOrEmpty(FormatFilter) || FormatFilter.Equals(Strings.GetMoreModsViewModel_AllFormats, ic) ||
                         mod.DataObject.Downloads.Any(d => d.Format.Equals(FormatFilter, ic));
            }
            catch (Exception ex)
            {
                log.Error("Mod filter error", ex);
                if (log.IsDebugEnabled)
                {
                    log.DebugFormat("Mod Name: [{0}], Author: [{1}], Type: [{2}], SubType: [{3}], SearchFilter: [{4}], TypeFilter: [{5}], SubTypeFilter: [{6}], FormatFilter: [{7}]",
                                    mod?.DataObject?.Name, mod?.DataObject?.Author, mod?.DataObject?.Type, mod?.DataObject?.SubType, SearchFilter, TypeFilter, SubTypeFilter, FormatFilter);
                }
            }
            return(search && types && subtypes && format);
        }