diff --git a/src/pregmod/widgets/pregmodWidgets.tw b/src/pregmod/widgets/pregmodWidgets.tw
index 8160a76068ef3f9203b9696fc77fcac0ada7faab..54b2ac396c35588466e10092b159247aa4458792 100644
--- a/src/pregmod/widgets/pregmodWidgets.tw
+++ b/src/pregmod/widgets/pregmodWidgets.tw
@@ -1378,9 +1378,14 @@ extremely pale -5
 		s.nationality = hashChoice($nationalities);
 		/* Check for a pre-set race and if the nationality fits, else regenerate */
 		if(s.race && validRaces.includes(s.race)) {
-			while(setup.raceSelector[s.nationality] && !(s.race in setup.raceSelector[s.nationality])) {
+			/* Maximum of 100 attempts */
+			for (var i = 0; setup.raceSelector[s.nationality] && !(s.race in setup.raceSelector[s.nationality]) && i < 100; i++) {
 				s.nationality = hashChoice($nationalities);
 			}
+			/* No success after 100 attempts, so just randomize according to race */
+			if (setup.raceSelector[s.nationality] && !(s.race in setup.raceSelector[s.nationality]) && i == 100) {
+				s.nationality = Object.keys(setup[s.race.toLowerCase().replace(/[ -]/g, '')+'Nationalities']).random();
+			}
 		}
 	}
 	if(!s.race || !validRaces.includes(s.race)) {