public bool Process(CensusDate censusDate, bool censusDone, bool checkCensus)
        {
            bool result = false;
            var  facts  = new List <Fact>();

            CensusDate = censusDate;
            if (IsValidFamily()) // valid family is one where any member is alive on census
            {
                if (censusDate == CensusDate.UKCENSUS1841)
                {
                    Console.Write("break");
                }
                if (IsValidIndividual(Wife, censusDone, true, checkCensus))
                {
                    result = true;
                    facts.AddRange(Wife.PersonalFacts);
                }
                else
                {
                    Wife = null;
                }
                // overwrite bestLocation by husbands as most commonly the family
                // end up at husbands location after marriage
                if (IsValidIndividual(Husband, censusDone, true, checkCensus))
                {
                    result = true;
                    facts.AddRange(Husband.PersonalFacts);
                }
                else
                {
                    Husband = null;
                }
                // update bestLocation by marriage date as Husband and Wife
                // locations are often birth locations
                var marriage = GetPreferredFact(Fact.MARRIAGE);
                if (marriage != null)
                {
                    facts.Add(marriage);
                }

                var censusChildren = new List <CensusIndividual>();
                // sort children oldest first
                Children.Sort(new CensusAgeComparer());
                foreach (var child in Children)
                {
                    // set location to childs birth location
                    // this will end up setting birth location of last child
                    // as long as the location is at least Parish level
                    if (IsValidIndividual(child, censusDone, false, checkCensus))
                    {
                        result = true;
                        censusChildren.Add(child);
                        facts.AddRange(child.PersonalFacts);
                    }
                }
                Children     = censusChildren;
                BestLocation = FactLocation.BestLocation(facts, censusDate);
            }
            return(result);
        }