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); }