diff --git a/src/events/intro/initNationalities.tw b/src/events/intro/initNationalities.tw
index d1fed4b30b3a21b563f3e01f1b331664081ad669..ef3710756cc12c2ed3d78c03feb81f25886dcce2 100644
--- a/src/events/intro/initNationalities.tw
+++ b/src/events/intro/initNationalities.tw
@@ -90,11 +90,11 @@
 <<unset $nationalitiescheck>> /* Removes unique nationalities array to avoid var bloat */
 
 <<if ndef $customVariety>> /* If non-custom variety, empties or defines $nationalities */
-<<set $nationalities = []>>
+<<set $nationalities = {}>>
 <</if>>
 <<if $terrain == "oceanic">>
 	<<if ndef $customVariety>>
-		<<set $nationalities = clone(setup.baseNationalities)>>
+		<<set $nationalities = arr2obj(setup.baseNationalities)>>
 	<</if>>
 	<<set $arcologies[0].FSSupremacistRace = "white">>
 	<<set $arcologies[0].FSSubjugationistRace = "middle eastern">>
@@ -104,226 +104,226 @@
 		<<set $arcologies[0].FSSupremacistRace = "white">>
 		<<set $arcologies[0].FSSubjugationistRace = "black">>
 		<<if ndef $customVariety>> /* If non-custom variety, adds regional $nationalities */
-		<<set $nationalities.push("American","American","American","American","American","American")>>
-		<<set $nationalities.push("Mexican","Mexican","Mexican")>>
-		<<set $nationalities.push("Dominican","Dominican")>>
-		<<set $nationalities.push("Canadian","Canadian")>>
-		<<set $nationalities.push("Haitian")>>
-		<<set $nationalities.push("Cuban")>>
-		<<set $nationalities.push("Puerto Rican")>>
-		<<set $nationalities.push("Jamaican")>>
-		<<set $nationalities.push("Guatemalan")>>
-		<<set $nationalities.push("Bermudian")>>
-		<<set $nationalities.push("Greenlandic")>>
-		<<set $nationalities.push("Belizean")>>
-		<<set $nationalities.push("Grenadian")>>
-		<<set $nationalities.push("Honduran")>>
-		<<set $nationalities.push("Costa Rican")>>
-		<<set $nationalities.push("Salvadoran")>>
-		<<set $nationalities.push("Nicaraguan")>>
-		<<set $nationalities.push("Panamanian")>>
+		<<set hashPush($nationalities, "American","American","American","American","American","American")>>
+		<<set hashPush($nationalities, "Mexican","Mexican","Mexican")>>
+		<<set hashPush($nationalities, "Dominican","Dominican")>>
+		<<set hashPush($nationalities, "Canadian","Canadian")>>
+		<<set hashPush($nationalities, "Haitian")>>
+		<<set hashPush($nationalities, "Cuban")>>
+		<<set hashPush($nationalities, "Puerto Rican")>>
+		<<set hashPush($nationalities, "Jamaican")>>
+		<<set hashPush($nationalities, "Guatemalan")>>
+		<<set hashPush($nationalities, "Bermudian")>>
+		<<set hashPush($nationalities, "Greenlandic")>>
+		<<set hashPush($nationalities, "Belizean")>>
+		<<set hashPush($nationalities, "Grenadian")>>
+		<<set hashPush($nationalities, "Honduran")>>
+		<<set hashPush($nationalities, "Costa Rican")>>
+		<<set hashPush($nationalities, "Salvadoran")>>
+		<<set hashPush($nationalities, "Nicaraguan")>>
+		<<set hashPush($nationalities, "Panamanian")>>
 		<</if>>
 	<<case "South America">>
 		<<set $arcologies[0].FSSupremacistRace = "latina">>
 		<<set $arcologies[0].FSSubjugationistRace = "black">>
 		<<if ndef $customVariety>>
-		<<set $nationalities.push("Brazilian","Brazilian","Brazilian","Brazilian")>>
-		<<set $nationalities.push("Argentinian","Argentinian")>>
-		<<set $nationalities.push("Colombian","Colombian")>>
-		<<set $nationalities.push("Peruvian")>>
-		<<set $nationalities.push("Venezuelan")>>
-		<<set $nationalities.push("Bolivian")>>
-		<<set $nationalities.push("Chilean")>>
-		<<set $nationalities.push("Guatemalan")>>
-		<<set $nationalities.push("Uruguayan")>>
-		<<set $nationalities.push("Ecuadorian")>>
-		<<set $nationalities.push("French Guianan")>>
-		<<set $nationalities.push("Guyanese")>>
-		<<set $nationalities.push("Paraguayan")>>
-		<<set $nationalities.push("Surinamese")>>
+		<<set hashPush($nationalities, "Brazilian","Brazilian","Brazilian","Brazilian")>>
+		<<set hashPush($nationalities, "Argentinian","Argentinian")>>
+		<<set hashPush($nationalities, "Colombian","Colombian")>>
+		<<set hashPush($nationalities, "Peruvian")>>
+		<<set hashPush($nationalities, "Venezuelan")>>
+		<<set hashPush($nationalities, "Bolivian")>>
+		<<set hashPush($nationalities, "Chilean")>>
+		<<set hashPush($nationalities, "Guatemalan")>>
+		<<set hashPush($nationalities, "Uruguayan")>>
+		<<set hashPush($nationalities, "Ecuadorian")>>
+		<<set hashPush($nationalities, "French Guianan")>>
+		<<set hashPush($nationalities, "Guyanese")>>
+		<<set hashPush($nationalities, "Paraguayan")>>
+		<<set hashPush($nationalities, "Surinamese")>>
 		<</if>>
 	<<case "Brazil">>
 		<<set $arcologies[0].FSSupremacistRace = "white">>
 		<<set $arcologies[0].FSSubjugationistRace = "black">>
 		<<if ndef $customVariety>>
-		<<set $nationalities.push("Brazilian","Brazilian","Brazilian","Brazilian","Brazilian","Brazilian","Brazilian","Brazilian","Brazilian","Brazilian","Brazilian","Brazilian","Brazilian","Brazilian","Brazilian")>>
-		<<set $nationalities.push("Argentinian","Argentinian")>>
-		<<set $nationalities.push("Colombian","Colombian")>>
-		<<set $nationalities.push("Peruvian")>>
-		<<set $nationalities.push("Venezuelan")>>
-		<<set $nationalities.push("Bolivian")>>
-		<<set $nationalities.push("Chilean")>>
-		<<set $nationalities.push("Guatemalan")>>
-		<<set $nationalities.push("Uruguayan")>>
-		<<set $nationalities.push("Ecuadorian")>>
-		<<set $nationalities.push("French Guianan")>>
-		<<set $nationalities.push("Guyanese")>>
-		<<set $nationalities.push("Paraguayan")>>
-		<<set $nationalities.push("Surinamese")>>
+		<<set hashPush($nationalities, "Brazilian","Brazilian","Brazilian","Brazilian","Brazilian","Brazilian","Brazilian","Brazilian","Brazilian","Brazilian","Brazilian","Brazilian","Brazilian","Brazilian","Brazilian")>>
+		<<set hashPush($nationalities, "Argentinian","Argentinian")>>
+		<<set hashPush($nationalities, "Colombian","Colombian")>>
+		<<set hashPush($nationalities, "Peruvian")>>
+		<<set hashPush($nationalities, "Venezuelan")>>
+		<<set hashPush($nationalities, "Bolivian")>>
+		<<set hashPush($nationalities, "Chilean")>>
+		<<set hashPush($nationalities, "Guatemalan")>>
+		<<set hashPush($nationalities, "Uruguayan")>>
+		<<set hashPush($nationalities, "Ecuadorian")>>
+		<<set hashPush($nationalities, "French Guianan")>>
+		<<set hashPush($nationalities, "Guyanese")>>
+		<<set hashPush($nationalities, "Paraguayan")>>
+		<<set hashPush($nationalities, "Surinamese")>>
 		<</if>>
 	<<case "the Middle East">>
 		<<set $arcologies[0].FSSupremacistRace = "middle eastern">>
 		<<set $arcologies[0].FSSubjugationistRace = "asian">>
 		<<if ndef $customVariety>>
-		<<set $nationalities.push("Egyptian", "Egyptian", "Egyptian")>>
-		<<set $nationalities.push("Iranian", "Iranian")>>
-		<<set $nationalities.push("Saudi", "Saudi")>>
-		<<set $nationalities.push("Turkish", "Turkish")>>
-		<<set $nationalities.push("Lebanese")>>
-		<<set $nationalities.push("Emirati")>>
-		<<set $nationalities.push("Jordanian")>>
-		<<set $nationalities.push("Omani")>>
-		<<set $nationalities.push("Israeli")>>
-		<<set $nationalities.push("Armenian")>>
-		<<set $nationalities.push("Iraqi")>>
-		<<set $nationalities.push("Afghan")>>
-		<<set $nationalities.push("Yemeni")>>
-		<<set $nationalities.push("Syrian")>>
-		<<set $nationalities.push("Azerbaijani")>>
-		<<set $nationalities.push("Bahraini")>>
-		<<set $nationalities.push("Cypriot")>>
-		<<set $nationalities.push("Georgian")>>
-		<<set $nationalities.push("Kuwaiti")>>
-		<<set $nationalities.push("Qatari")>>
-		<<set $nationalities.push("Palestinian")>>
+		<<set hashPush($nationalities, "Egyptian", "Egyptian", "Egyptian")>>
+		<<set hashPush($nationalities, "Iranian", "Iranian")>>
+		<<set hashPush($nationalities, "Saudi", "Saudi")>>
+		<<set hashPush($nationalities, "Turkish", "Turkish")>>
+		<<set hashPush($nationalities, "Lebanese")>>
+		<<set hashPush($nationalities, "Emirati")>>
+		<<set hashPush($nationalities, "Jordanian")>>
+		<<set hashPush($nationalities, "Omani")>>
+		<<set hashPush($nationalities, "Israeli")>>
+		<<set hashPush($nationalities, "Armenian")>>
+		<<set hashPush($nationalities, "Iraqi")>>
+		<<set hashPush($nationalities, "Afghan")>>
+		<<set hashPush($nationalities, "Yemeni")>>
+		<<set hashPush($nationalities, "Syrian")>>
+		<<set hashPush($nationalities, "Azerbaijani")>>
+		<<set hashPush($nationalities, "Bahraini")>>
+		<<set hashPush($nationalities, "Cypriot")>>
+		<<set hashPush($nationalities, "Georgian")>>
+		<<set hashPush($nationalities, "Kuwaiti")>>
+		<<set hashPush($nationalities, "Qatari")>>
+		<<set hashPush($nationalities, "Palestinian")>>
 		<</if>>
 	<<case "Africa">>
 		<<set $arcologies[0].FSSupremacistRace = "black">>
 		<<set $arcologies[0].FSSubjugationistRace = "white">>
 		<<if ndef $customVariety>>
-		<<set $nationalities.push("Nigerian", "Nigerian", "Nigerian")>>
-		<<set $nationalities.push("South African","South African","South African")>>
-		<<set $nationalities.push("Kenyan", "Kenyan")>>
-		<<set $nationalities.push("Congolese", "Congolese")>>
-		<<set $nationalities.push("Ethiopian", "Ethiopian")>>
-		<<set $nationalities.push("Algerian","Algerian")>>
-		<<set $nationalities.push("Sudanese","Sudanese")>>
-		<<set $nationalities.push("Moroccan")>>
-		<<set $nationalities.push("Ghanan")>>
-		<<set $nationalities.push("Tunisian")>>
-		<<set $nationalities.push("Malian")>>
-		<<set $nationalities.push("Libyan")>>
-		<<set $nationalities.push("Zimbabwean")>>
-		<<set $nationalities.push("Tanzanian")>>
-		<<set $nationalities.push("Ugandan")>>
-		<<set $nationalities.push("Cameroonian")>>
-		<<set $nationalities.push("Gabonese")>>
-		<<set $nationalities.push("Djiboutian")>>
-		<<set $nationalities.push("Zambian")>>
-		<<set $nationalities.push("Malagasy")>>
-		<<set $nationalities.push("Nigerien")>>
-		<<set $nationalities.push("Burundian")>>
-		<<set $nationalities.push("Seychellois")>>
+		<<set hashPush($nationalities, "Nigerian", "Nigerian", "Nigerian")>>
+		<<set hashPush($nationalities, "South African","South African","South African")>>
+		<<set hashPush($nationalities, "Kenyan", "Kenyan")>>
+		<<set hashPush($nationalities, "Congolese", "Congolese")>>
+		<<set hashPush($nationalities, "Ethiopian", "Ethiopian")>>
+		<<set hashPush($nationalities, "Algerian","Algerian")>>
+		<<set hashPush($nationalities, "Sudanese","Sudanese")>>
+		<<set hashPush($nationalities, "Moroccan")>>
+		<<set hashPush($nationalities, "Ghanan")>>
+		<<set hashPush($nationalities, "Tunisian")>>
+		<<set hashPush($nationalities, "Malian")>>
+		<<set hashPush($nationalities, "Libyan")>>
+		<<set hashPush($nationalities, "Zimbabwean")>>
+		<<set hashPush($nationalities, "Tanzanian")>>
+		<<set hashPush($nationalities, "Ugandan")>>
+		<<set hashPush($nationalities, "Cameroonian")>>
+		<<set hashPush($nationalities, "Gabonese")>>
+		<<set hashPush($nationalities, "Djiboutian")>>
+		<<set hashPush($nationalities, "Zambian")>>
+		<<set hashPush($nationalities, "Malagasy")>>
+		<<set hashPush($nationalities, "Nigerien")>>
+		<<set hashPush($nationalities, "Burundian")>>
+		<<set hashPush($nationalities, "Seychellois")>>
 		<</if>>
 	<<case "Asia">>
 		<<set $arcologies[0].FSSupremacistRace = "asian">>
 		<<set $arcologies[0].FSSubjugationistRace = "indo-aryan">>
 		<<if ndef $customVariety>>
-		<<set $nationalities.push("Chinese","Chinese","Chinese","Chinese","Chinese","Chinese","Chinese","Chinese","Chinese","Chinese","Chinese","Chinese","Chinese","Chinese")>>
-		<<set $nationalities.push("Indian","Indian","Indian","Indian","Indian","Indian","Indian","Indian","Indian","Indian")>>
-		<<set $nationalities.push("Indonesian","Indonesian","Indonesian")>>
-		<<set $nationalities.push("Bangladeshi","Bangladeshi","Bangladeshi")>>
-		<<set $nationalities.push("Thai","Thai")>>
-		<<set $nationalities.push("Vietnamese","Vietnamese")>>
-		<<set $nationalities.push("Korean","Korean")>>
-		<<set $nationalities.push("Pakistani","Pakistani")>>
-		<<set $nationalities.push("Filipina","Filipina")>>
-		<<set $nationalities.push("Japanese","Japanese")>>
-		<<set $nationalities.push("Burmese","Burmese")>>
-		<<set $nationalities.push("Malaysian", "Malaysian")>>
-		<<set $nationalities.push("Uzbek")>>
-		<<set $nationalities.push("Nepalese")>>
-		<<set $nationalities.push("Kazakh")>>
-		<<set $nationalities.push("Cambodian")>>
-		<<set $nationalities.push("Bruneian")>>
-		<<set $nationalities.push("Singaporean")>>
-		<<set $nationalities.push("Laotian")>>
-		<<set $nationalities.push("Mongolian")>>
-		<<set $nationalities.push("Taiwanese")>>
-		<<set $nationalities.push("Maldivian")>>
-		<<set $nationalities.push("Bhutanese")>>
-		<<set $nationalities.push("East Timorese")>>
-		<<set $nationalities.push("Kyrgyz")>>
-		<<set $nationalities.push("Sri Lankan")>>
-		<<set $nationalities.push("Tajik")>>
-		<<set $nationalities.push("Turkmen")>>
+		<<set hashPush($nationalities, "Chinese","Chinese","Chinese","Chinese","Chinese","Chinese","Chinese","Chinese","Chinese","Chinese","Chinese","Chinese","Chinese","Chinese")>>
+		<<set hashPush($nationalities, "Indian","Indian","Indian","Indian","Indian","Indian","Indian","Indian","Indian","Indian")>>
+		<<set hashPush($nationalities, "Indonesian","Indonesian","Indonesian")>>
+		<<set hashPush($nationalities, "Bangladeshi","Bangladeshi","Bangladeshi")>>
+		<<set hashPush($nationalities, "Thai","Thai")>>
+		<<set hashPush($nationalities, "Vietnamese","Vietnamese")>>
+		<<set hashPush($nationalities, "Korean","Korean")>>
+		<<set hashPush($nationalities, "Pakistani","Pakistani")>>
+		<<set hashPush($nationalities, "Filipina","Filipina")>>
+		<<set hashPush($nationalities, "Japanese","Japanese")>>
+		<<set hashPush($nationalities, "Burmese","Burmese")>>
+		<<set hashPush($nationalities, "Malaysian", "Malaysian")>>
+		<<set hashPush($nationalities, "Uzbek")>>
+		<<set hashPush($nationalities, "Nepalese")>>
+		<<set hashPush($nationalities, "Kazakh")>>
+		<<set hashPush($nationalities, "Cambodian")>>
+		<<set hashPush($nationalities, "Bruneian")>>
+		<<set hashPush($nationalities, "Singaporean")>>
+		<<set hashPush($nationalities, "Laotian")>>
+		<<set hashPush($nationalities, "Mongolian")>>
+		<<set hashPush($nationalities, "Taiwanese")>>
+		<<set hashPush($nationalities, "Maldivian")>>
+		<<set hashPush($nationalities, "Bhutanese")>>
+		<<set hashPush($nationalities, "East Timorese")>>
+		<<set hashPush($nationalities, "Kyrgyz")>>
+		<<set hashPush($nationalities, "Sri Lankan")>>
+		<<set hashPush($nationalities, "Tajik")>>
+		<<set hashPush($nationalities, "Turkmen")>>
 		<</if>>
 	<<case "Europe">>
 		<<set $arcologies[0].FSSupremacistRace = "white">>
 		<<set $arcologies[0].FSSubjugationistRace = "middle eastern">>
 		<<if ndef $customVariety>>
-		<<set $nationalities.push("Russian", "Russian", "Russian", "Russian")>>
-		<<set $nationalities.push("German", "German", "German")>>
-		<<set $nationalities.push("Belarusian","Belarusian")>>
-		<<set $nationalities.push("Ukrainian", "Ukrainian")>>
-		<<set $nationalities.push("French", "French")>>
-		<<set $nationalities.push("Italian", "Italian")>>
-		<<set $nationalities.push("Spanish", "Spanish")>>
-		<<set $nationalities.push("British", "British")>>
-		<<set $nationalities.push("Polish", "Polish")>>
-		<<set $nationalities.push("Swedish")>>
-		<<set $nationalities.push("Romanian")>>
-		<<set $nationalities.push("Lithuanian")>>
-		<<set $nationalities.push("Irish")>>
-		<<set $nationalities.push("Scottish")>>
-		<<set $nationalities.push("Icelandic")>>
-		<<set $nationalities.push("Finnish")>>
-		<<set $nationalities.push("Greek")>>
-		<<set $nationalities.push("Belgian")>>
-		<<set $nationalities.push("Danish")>>
-		<<set $nationalities.push("Czech")>>
-		<<set $nationalities.push("Serbian")>>
-		<<set $nationalities.push("Slovak")>>
-		<<set $nationalities.push("Norwegian")>>
-		<<set $nationalities.push("Dutch")>>
-		<<set $nationalities.push("Austrian")>>
-		<<set $nationalities.push("Swiss")>>
-		<<set $nationalities.push("Portuguese")>>
-		<<set $nationalities.push("Hungarian")>>
-		<<set $nationalities.push("Estonian")>>
-		<<set $nationalities.push("Sammarinese")>>
-		<<set $nationalities.push("Monégasque")>>
-		<<set $nationalities.push("Montenegrin")>>
-		<<set $nationalities.push("Albanian")>>
-		<<set $nationalities.push("Bosnian")>>
-		<<set $nationalities.push("Croatian")>>
-		<<set $nationalities.push("Kosovan")>>
-		<<set $nationalities.push("Macedonian")>>
-		<<set $nationalities.push("Maltese")>>
-		<<set $nationalities.push("Andorran")>>
-		<<set $nationalities.push("Bulgarian")>>
-		<<set $nationalities.push("Luxembourgian")>>
-		<<set $nationalities.push("Moldovan")>>
-		<<set $nationalities.push("a Liechtensteiner")>>
-		<<set $nationalities.push("Vatican")>>
-		<<set $nationalities.push("Belarusian")>>
-		<<set $nationalities.push("Latvian")>>
-		<<set $nationalities.push("Slovene")>>
+		<<set hashPush($nationalities, "Russian", "Russian", "Russian", "Russian")>>
+		<<set hashPush($nationalities, "German", "German", "German")>>
+		<<set hashPush($nationalities, "Belarusian","Belarusian")>>
+		<<set hashPush($nationalities, "Ukrainian", "Ukrainian")>>
+		<<set hashPush($nationalities, "French", "French")>>
+		<<set hashPush($nationalities, "Italian", "Italian")>>
+		<<set hashPush($nationalities, "Spanish", "Spanish")>>
+		<<set hashPush($nationalities, "British", "British")>>
+		<<set hashPush($nationalities, "Polish", "Polish")>>
+		<<set hashPush($nationalities, "Swedish")>>
+		<<set hashPush($nationalities, "Romanian")>>
+		<<set hashPush($nationalities, "Lithuanian")>>
+		<<set hashPush($nationalities, "Irish")>>
+		<<set hashPush($nationalities, "Scottish")>>
+		<<set hashPush($nationalities, "Icelandic")>>
+		<<set hashPush($nationalities, "Finnish")>>
+		<<set hashPush($nationalities, "Greek")>>
+		<<set hashPush($nationalities, "Belgian")>>
+		<<set hashPush($nationalities, "Danish")>>
+		<<set hashPush($nationalities, "Czech")>>
+		<<set hashPush($nationalities, "Serbian")>>
+		<<set hashPush($nationalities, "Slovak")>>
+		<<set hashPush($nationalities, "Norwegian")>>
+		<<set hashPush($nationalities, "Dutch")>>
+		<<set hashPush($nationalities, "Austrian")>>
+		<<set hashPush($nationalities, "Swiss")>>
+		<<set hashPush($nationalities, "Portuguese")>>
+		<<set hashPush($nationalities, "Hungarian")>>
+		<<set hashPush($nationalities, "Estonian")>>
+		<<set hashPush($nationalities, "Sammarinese")>>
+		<<set hashPush($nationalities, "Monégasque")>>
+		<<set hashPush($nationalities, "Montenegrin")>>
+		<<set hashPush($nationalities, "Albanian")>>
+		<<set hashPush($nationalities, "Bosnian")>>
+		<<set hashPush($nationalities, "Croatian")>>
+		<<set hashPush($nationalities, "Kosovan")>>
+		<<set hashPush($nationalities, "Macedonian")>>
+		<<set hashPush($nationalities, "Maltese")>>
+		<<set hashPush($nationalities, "Andorran")>>
+		<<set hashPush($nationalities, "Bulgarian")>>
+		<<set hashPush($nationalities, "Luxembourgian")>>
+		<<set hashPush($nationalities, "Moldovan")>>
+		<<set hashPush($nationalities, "a Liechtensteiner")>>
+		<<set hashPush($nationalities, "Vatican")>>
+		<<set hashPush($nationalities, "Belarusian")>>
+		<<set hashPush($nationalities, "Latvian")>>
+		<<set hashPush($nationalities, "Slovene")>>
 		<</if>>
 	<<case "Australia">>
 		<<set $arcologies[0].FSSupremacistRace = "white">>
 		<<set $arcologies[0].FSSubjugationistRace = "asian">>
-		<<set $nationalities.push("Australian","Australian","Australian")>>
-		<<set $nationalities.push("a New Zealander")>>
-		<<set $nationalities.push("Marshallese")>>
-		<<set $nationalities.push("Tuvaluan")>>
-		<<set $nationalities.push("I-Kiribati")>>
-		<<set $nationalities.push("Nauruan")>>
-		<<set $nationalities.push("Micronesian")>>
-		<<set $nationalities.push("Palauan")>>
-		<<set $nationalities.push("Papua New Guinean")>>
-		<<set $nationalities.push("a Cook Islander")>>
-		<<set $nationalities.push("Fijian")>>
-		<<set $nationalities.push("Ni-Vanuatu")>>
-		<<set $nationalities.push("Niuean")>>
-		<<set $nationalities.push("Samoan")>>
-		<<set $nationalities.push("a Solomon Islander")>>
-		<<set $nationalities.push("Tongan")>>
+		<<set hashPush($nationalities, "Australian","Australian","Australian")>>
+		<<set hashPush($nationalities, "a New Zealander")>>
+		<<set hashPush($nationalities, "Marshallese")>>
+		<<set hashPush($nationalities, "Tuvaluan")>>
+		<<set hashPush($nationalities, "I-Kiribati")>>
+		<<set hashPush($nationalities, "Nauruan")>>
+		<<set hashPush($nationalities, "Micronesian")>>
+		<<set hashPush($nationalities, "Palauan")>>
+		<<set hashPush($nationalities, "Papua New Guinean")>>
+		<<set hashPush($nationalities, "a Cook Islander")>>
+		<<set hashPush($nationalities, "Fijian")>>
+		<<set hashPush($nationalities, "Ni-Vanuatu")>>
+		<<set hashPush($nationalities, "Niuean")>>
+		<<set hashPush($nationalities, "Samoan")>>
+		<<set hashPush($nationalities, "a Solomon Islander")>>
+		<<set hashPush($nationalities, "Tongan")>>
 	<<case "Japan">>
 		<<set $arcologies[0].FSSupremacistRace = "asian">>
 		<<set $arcologies[0].FSSubjugationistRace = "asian">>
 		<<if ndef $customVariety>>
-		<<set $nationalities.push("Japanese","Japanese","Japanese")>>
+		<<set hashPush($nationalities, "Japanese","Japanese","Japanese")>>
 		<</if>>
 	<</switch>>
 <</if>>
@@ -332,181 +332,181 @@
 <<if $internationalTrade != 0>>
 	<<set $nationalities = clone(setup.baseNationalities)>>
 	<<if $internationalVariety == 0>>
-		<<set $nationalities.push("Chinese","Chinese","Chinese","Chinese","Chinese","Chinese","Chinese","Chinese","Chinese","Chinese","Chinese","Chinese","Chinese","Chinese")>>
-		<<set $nationalities.push("Indian","Indian","Indian","Indian","Indian","Indian","Indian","Indian","Indian","Indian")>>
-		<<set $nationalities.push("American","American","American","American")>>
-		<<set $nationalities.push("Indonesian","Indonesian","Indonesian","Indonesian")>>
-		<<set $nationalities.push("Bangladeshi","Bangladeshi","Bangladeshi")>>
-		<<set $nationalities.push("Russian","Russian","Russian")>>
-		<<set $nationalities.push("Belarusian","Belarusian","Belarusian")>>
-		<<set $nationalities.push("Nigerian","Nigerian","Nigerian")>>
-		<<set $nationalities.push("South African","South African","South African")>>
-		<<set $nationalities.push("Brazilian","Brazilian","Brazilian")>>
-		<<set $nationalities.push("Mexican","Mexican","Mexican")>>
-		<<set $nationalities.push("Dominican","Dominican","Dominican")>>
-		<<set $nationalities.push("Argentinian","Argentinian")>>
-		<<set $nationalities.push("Egyptian","Egyptian")>>
-		<<set $nationalities.push("Pakistani","Pakistani")>>
-		<<set $nationalities.push("Filipina","Filipina")>>
-		<<set $nationalities.push("Vietnamese","Vietnamese")>>
-		<<set $nationalities.push("Iranian","Iranian")>>
-		<<set $nationalities.push("Korean","Korean")>>
-		<<set $nationalities.push("Japanese","Japanese")>>
-		<<set $nationalities.push("Thai","Thai")>>
-		<<set $nationalities.push("Turkish","Turkish")>>
-		<<set $nationalities.push("Ethiopian","Ethiopian")>>
-		<<set $nationalities.push("Kenyan", "Kenyan")>>
-		<<set $nationalities.push("Congolese","Congolese")>>
-		<<set $nationalities.push("Colombian","Colombian")>>
-		<<set $nationalities.push("Venezuelan","Venezuelan")>>
-		<<set $nationalities.push("German","German")>>
-		<<set $nationalities.push("French","French")>>
-		<<set $nationalities.push("British","British")>>
-		<<set $nationalities.push("Italian","Italian")>>
-		<<set $nationalities.push("Spanish","Spanish")>>
-		<<set $nationalities.push("Ukrainian","Ukrainian")>>
-		<<set $nationalities.push("Polish","Polish")>>
-		<<set $nationalities.push("Burmese","Burmese")>>
-		<<set $nationalities.push("Algerian","Algerian")>>
-		<<set $nationalities.push("Sudanese","Sudanese")>>
-		<<set $nationalities.push("Malaysian", "Malaysian")>>
-		<<set $nationalities.push("Lebanese")>>
-		<<set $nationalities.push("Tunisian")>>
-		<<set $nationalities.push("Emirati")>>
-		<<set $nationalities.push("Libyan")>>
-		<<set $nationalities.push("Jordanian")>>
-		<<set $nationalities.push("Omani")>>
-		<<set $nationalities.push("Malian")>>
-		<<set $nationalities.push("Iraqi")>>
-		<<set $nationalities.push("Uzbek")>>
-		<<set $nationalities.push("Nepalese")>>
-		<<set $nationalities.push("Afghan")>>
-		<<set $nationalities.push("Yemeni")>>
-		<<set $nationalities.push("Saudi")>>
-		<<set $nationalities.push("Australian")>>
-		<<set $nationalities.push("Ghanan")>>
-		<<set $nationalities.push("Canadian")>>
-		<<set $nationalities.push("Peruvian")>>
-		<<set $nationalities.push("Chilean")>>
-		<<set $nationalities.push("Guatemalan")>>
-		<<set $nationalities.push("a New Zealander")>>
-		<<set $nationalities.push("Irish")>>
-		<<set $nationalities.push("Scottish")>>
-		<<set $nationalities.push("Icelandic")>>
-		<<set $nationalities.push("Finnish")>>
-		<<set $nationalities.push("Israeli")>>
-		<<set $nationalities.push("Armenian")>>
-		<<set $nationalities.push("Greek")>>
-		<<set $nationalities.push("Moroccan")>>
-		<<set $nationalities.push("Zimbabwean")>>
-		<<set $nationalities.push("Tanzanian")>>
-		<<set $nationalities.push("Ugandan")>>
-		<<set $nationalities.push("Romanian")>>
-		<<set $nationalities.push("Swedish")>>
-		<<set $nationalities.push("Belgian")>>
-		<<set $nationalities.push("Danish")>>
-		<<set $nationalities.push("Czech")>>
-		<<set $nationalities.push("Serbian")>>
-		<<set $nationalities.push("Slovak")>>
-		<<set $nationalities.push("Norwegian")>>
-		<<set $nationalities.push("Dutch")>>
-		<<set $nationalities.push("Austrian")>>
-		<<set $nationalities.push("Swiss")>>
-		<<set $nationalities.push("Portuguese")>>
-		<<set $nationalities.push("Hungarian")>>
-		<<set $nationalities.push("Estonian")>>
-		<<set $nationalities.push("Lithuanian")>>
-		<<set $nationalities.push("Bolivian")>>
-		<<set $nationalities.push("Haitian")>>
-		<<set $nationalities.push("Puerto Rican")>>
-		<<set $nationalities.push("Jamaican")>>
-		<<set $nationalities.push("Cuban")>>
-		<<set $nationalities.push("Kazakh")>>
-		<<set $nationalities.push("Sammarinese")>>
-		<<set $nationalities.push("Marshallese")>>
-		<<set $nationalities.push("Syrian")>>
-		<<set $nationalities.push("Bermudian")>>
-		<<set $nationalities.push("Uruguayan")>>
-		<<set $nationalities.push("Monégasque")>>
-		<<set $nationalities.push("Montenegrin")>>
-		<<set $nationalities.push("Cambodian")>>
-		<<set $nationalities.push("Cameroonian")>>
-		<<set $nationalities.push("Gabonese")>>
-		<<set $nationalities.push("Djiboutian")>>
-		<<set $nationalities.push("Greenlandic")>>
-		<<set $nationalities.push("Tuvaluan")>>
-		<<set $nationalities.push("Zambian")>>
-		<<set $nationalities.push("Albanian")>>
-		<<set $nationalities.push("Bruneian")>>
-		<<set $nationalities.push("Singaporean")>>
-		<<set $nationalities.push("Laotian")>>
-		<<set $nationalities.push("Mongolian")>>
-		<<set $nationalities.push("Taiwanese")>>
-		<<set $nationalities.push("Belizean")>>
-		<<set $nationalities.push("Grenadian")>>
-		<<set $nationalities.push("I-Kiribati")>>
-		<<set $nationalities.push("Malagasy")>>
-		<<set $nationalities.push("Maldivian")>>
-		<<set $nationalities.push("Bosnian")>>
-		<<set $nationalities.push("Croatian")>>
-		<<set $nationalities.push("Kosovan")>>
-		<<set $nationalities.push("Macedonian")>>
-		<<set $nationalities.push("Honduran")>>
-		<<set $nationalities.push("Maltese")>>
-		<<set $nationalities.push("Nauruan")>>
-		<<set $nationalities.push("Micronesian")>>
-		<<set $nationalities.push("Costa Rican")>>
-		<<set $nationalities.push("Salvadoran")>>
-		<<set $nationalities.push("Nicaraguan")>>
-		<<set $nationalities.push("Panamanian")>>
-		<<set $nationalities.push("Nigerien")>>
-		<<set $nationalities.push("Andorran")>>
-		<<set $nationalities.push("Bulgarian")>>
-		<<set $nationalities.push("Luxembourgian")>>
-		<<set $nationalities.push("Moldovan")>>
-		<<set $nationalities.push("Bahamian")>>
-		<<set $nationalities.push("Barbadian")>>
-		<<set $nationalities.push("Dominiquais")>>
-		<<set $nationalities.push("Trinidadian")>>
-		<<set $nationalities.push("Palauan")>>
-		<<set $nationalities.push("Papua New Guinean")>>
-		<<set $nationalities.push("Kittitian")>>
-		<<set $nationalities.push("Ecuadorian")>>
-		<<set $nationalities.push("French Guianan")>>
-		<<set $nationalities.push("Guyanese")>>
-		<<set $nationalities.push("Paraguayan")>>
-		<<set $nationalities.push("Surinamese")>>
-		<<set $nationalities.push("Bhutanese")>>
-		<<set $nationalities.push("East Timorese")>>
-		<<set $nationalities.push("Kyrgyz")>>
-		<<set $nationalities.push("Sri Lankan")>>
-		<<set $nationalities.push("a Liechtensteiner")>>
-		<<set $nationalities.push("Vatican")>>
-		<<set $nationalities.push("Belarusian")>>
-		<<set $nationalities.push("Burundian")>>
-		<<set $nationalities.push("Latvian")>>
-		<<set $nationalities.push("Seychellois")>>
-		<<set $nationalities.push("Slovene")>>
-		<<set $nationalities.push("Antiguan")>>
-		<<set $nationalities.push("Saint Lucian")>>
-		<<set $nationalities.push("Aruban")>>
-		<<set $nationalities.push("Azerbaijani")>>
-		<<set $nationalities.push("Bahraini")>>
-		<<set $nationalities.push("Cypriot")>>
-		<<set $nationalities.push("Georgian")>>
-		<<set $nationalities.push("Kuwaiti")>>
-		<<set $nationalities.push("Qatari")>>
-		<<set $nationalities.push("Tajik")>>
-		<<set $nationalities.push("Turkmen")>>
-		<<set $nationalities.push("Vincentian")>>
-		<<set $nationalities.push("a Cook Islander")>>
-		<<set $nationalities.push("Fijian")>>
-		<<set $nationalities.push("Ni-Vanuatu")>>
-		<<set $nationalities.push("Niuean")>>
-		<<set $nationalities.push("Palestinian")>>
-		<<set $nationalities.push("Samoan")>>
-		<<set $nationalities.push("a Solomon Islander")>>
-		<<set $nationalities.push("Tongan")>>
+		<<set hashPush($nationalities, "Chinese","Chinese","Chinese","Chinese","Chinese","Chinese","Chinese","Chinese","Chinese","Chinese","Chinese","Chinese","Chinese","Chinese")>>
+		<<set hashPush($nationalities, "Indian","Indian","Indian","Indian","Indian","Indian","Indian","Indian","Indian","Indian")>>
+		<<set hashPush($nationalities, "American","American","American","American")>>
+		<<set hashPush($nationalities, "Indonesian","Indonesian","Indonesian","Indonesian")>>
+		<<set hashPush($nationalities, "Bangladeshi","Bangladeshi","Bangladeshi")>>
+		<<set hashPush($nationalities, "Russian","Russian","Russian")>>
+		<<set hashPush($nationalities, "Belarusian","Belarusian","Belarusian")>>
+		<<set hashPush($nationalities, "Nigerian","Nigerian","Nigerian")>>
+		<<set hashPush($nationalities, "South African","South African","South African")>>
+		<<set hashPush($nationalities, "Brazilian","Brazilian","Brazilian")>>
+		<<set hashPush($nationalities, "Mexican","Mexican","Mexican")>>
+		<<set hashPush($nationalities, "Dominican","Dominican","Dominican")>>
+		<<set hashPush($nationalities, "Argentinian","Argentinian")>>
+		<<set hashPush($nationalities, "Egyptian","Egyptian")>>
+		<<set hashPush($nationalities, "Pakistani","Pakistani")>>
+		<<set hashPush($nationalities, "Filipina","Filipina")>>
+		<<set hashPush($nationalities, "Vietnamese","Vietnamese")>>
+		<<set hashPush($nationalities, "Iranian","Iranian")>>
+		<<set hashPush($nationalities, "Korean","Korean")>>
+		<<set hashPush($nationalities, "Japanese","Japanese")>>
+		<<set hashPush($nationalities, "Thai","Thai")>>
+		<<set hashPush($nationalities, "Turkish","Turkish")>>
+		<<set hashPush($nationalities, "Ethiopian","Ethiopian")>>
+		<<set hashPush($nationalities, "Kenyan", "Kenyan")>>
+		<<set hashPush($nationalities, "Congolese","Congolese")>>
+		<<set hashPush($nationalities, "Colombian","Colombian")>>
+		<<set hashPush($nationalities, "Venezuelan","Venezuelan")>>
+		<<set hashPush($nationalities, "German","German")>>
+		<<set hashPush($nationalities, "French","French")>>
+		<<set hashPush($nationalities, "British","British")>>
+		<<set hashPush($nationalities, "Italian","Italian")>>
+		<<set hashPush($nationalities, "Spanish","Spanish")>>
+		<<set hashPush($nationalities, "Ukrainian","Ukrainian")>>
+		<<set hashPush($nationalities, "Polish","Polish")>>
+		<<set hashPush($nationalities, "Burmese","Burmese")>>
+		<<set hashPush($nationalities, "Algerian","Algerian")>>
+		<<set hashPush($nationalities, "Sudanese","Sudanese")>>
+		<<set hashPush($nationalities, "Malaysian", "Malaysian")>>
+		<<set hashPush($nationalities, "Lebanese")>>
+		<<set hashPush($nationalities, "Tunisian")>>
+		<<set hashPush($nationalities, "Emirati")>>
+		<<set hashPush($nationalities, "Libyan")>>
+		<<set hashPush($nationalities, "Jordanian")>>
+		<<set hashPush($nationalities, "Omani")>>
+		<<set hashPush($nationalities, "Malian")>>
+		<<set hashPush($nationalities, "Iraqi")>>
+		<<set hashPush($nationalities, "Uzbek")>>
+		<<set hashPush($nationalities, "Nepalese")>>
+		<<set hashPush($nationalities, "Afghan")>>
+		<<set hashPush($nationalities, "Yemeni")>>
+		<<set hashPush($nationalities, "Saudi")>>
+		<<set hashPush($nationalities, "Australian")>>
+		<<set hashPush($nationalities, "Ghanan")>>
+		<<set hashPush($nationalities, "Canadian")>>
+		<<set hashPush($nationalities, "Peruvian")>>
+		<<set hashPush($nationalities, "Chilean")>>
+		<<set hashPush($nationalities, "Guatemalan")>>
+		<<set hashPush($nationalities, "a New Zealander")>>
+		<<set hashPush($nationalities, "Irish")>>
+		<<set hashPush($nationalities, "Scottish")>>
+		<<set hashPush($nationalities, "Icelandic")>>
+		<<set hashPush($nationalities, "Finnish")>>
+		<<set hashPush($nationalities, "Israeli")>>
+		<<set hashPush($nationalities, "Armenian")>>
+		<<set hashPush($nationalities, "Greek")>>
+		<<set hashPush($nationalities, "Moroccan")>>
+		<<set hashPush($nationalities, "Zimbabwean")>>
+		<<set hashPush($nationalities, "Tanzanian")>>
+		<<set hashPush($nationalities, "Ugandan")>>
+		<<set hashPush($nationalities, "Romanian")>>
+		<<set hashPush($nationalities, "Swedish")>>
+		<<set hashPush($nationalities, "Belgian")>>
+		<<set hashPush($nationalities, "Danish")>>
+		<<set hashPush($nationalities, "Czech")>>
+		<<set hashPush($nationalities, "Serbian")>>
+		<<set hashPush($nationalities, "Slovak")>>
+		<<set hashPush($nationalities, "Norwegian")>>
+		<<set hashPush($nationalities, "Dutch")>>
+		<<set hashPush($nationalities, "Austrian")>>
+		<<set hashPush($nationalities, "Swiss")>>
+		<<set hashPush($nationalities, "Portuguese")>>
+		<<set hashPush($nationalities, "Hungarian")>>
+		<<set hashPush($nationalities, "Estonian")>>
+		<<set hashPush($nationalities, "Lithuanian")>>
+		<<set hashPush($nationalities, "Bolivian")>>
+		<<set hashPush($nationalities, "Haitian")>>
+		<<set hashPush($nationalities, "Puerto Rican")>>
+		<<set hashPush($nationalities, "Jamaican")>>
+		<<set hashPush($nationalities, "Cuban")>>
+		<<set hashPush($nationalities, "Kazakh")>>
+		<<set hashPush($nationalities, "Sammarinese")>>
+		<<set hashPush($nationalities, "Marshallese")>>
+		<<set hashPush($nationalities, "Syrian")>>
+		<<set hashPush($nationalities, "Bermudian")>>
+		<<set hashPush($nationalities, "Uruguayan")>>
+		<<set hashPush($nationalities, "Monégasque")>>
+		<<set hashPush($nationalities, "Montenegrin")>>
+		<<set hashPush($nationalities, "Cambodian")>>
+		<<set hashPush($nationalities, "Cameroonian")>>
+		<<set hashPush($nationalities, "Gabonese")>>
+		<<set hashPush($nationalities, "Djiboutian")>>
+		<<set hashPush($nationalities, "Greenlandic")>>
+		<<set hashPush($nationalities, "Tuvaluan")>>
+		<<set hashPush($nationalities, "Zambian")>>
+		<<set hashPush($nationalities, "Albanian")>>
+		<<set hashPush($nationalities, "Bruneian")>>
+		<<set hashPush($nationalities, "Singaporean")>>
+		<<set hashPush($nationalities, "Laotian")>>
+		<<set hashPush($nationalities, "Mongolian")>>
+		<<set hashPush($nationalities, "Taiwanese")>>
+		<<set hashPush($nationalities, "Belizean")>>
+		<<set hashPush($nationalities, "Grenadian")>>
+		<<set hashPush($nationalities, "I-Kiribati")>>
+		<<set hashPush($nationalities, "Malagasy")>>
+		<<set hashPush($nationalities, "Maldivian")>>
+		<<set hashPush($nationalities, "Bosnian")>>
+		<<set hashPush($nationalities, "Croatian")>>
+		<<set hashPush($nationalities, "Kosovan")>>
+		<<set hashPush($nationalities, "Macedonian")>>
+		<<set hashPush($nationalities, "Honduran")>>
+		<<set hashPush($nationalities, "Maltese")>>
+		<<set hashPush($nationalities, "Nauruan")>>
+		<<set hashPush($nationalities, "Micronesian")>>
+		<<set hashPush($nationalities, "Costa Rican")>>
+		<<set hashPush($nationalities, "Salvadoran")>>
+		<<set hashPush($nationalities, "Nicaraguan")>>
+		<<set hashPush($nationalities, "Panamanian")>>
+		<<set hashPush($nationalities, "Nigerien")>>
+		<<set hashPush($nationalities, "Andorran")>>
+		<<set hashPush($nationalities, "Bulgarian")>>
+		<<set hashPush($nationalities, "Luxembourgian")>>
+		<<set hashPush($nationalities, "Moldovan")>>
+		<<set hashPush($nationalities, "Bahamian")>>
+		<<set hashPush($nationalities, "Barbadian")>>
+		<<set hashPush($nationalities, "Dominiquais")>>
+		<<set hashPush($nationalities, "Trinidadian")>>
+		<<set hashPush($nationalities, "Palauan")>>
+		<<set hashPush($nationalities, "Papua New Guinean")>>
+		<<set hashPush($nationalities, "Kittitian")>>
+		<<set hashPush($nationalities, "Ecuadorian")>>
+		<<set hashPush($nationalities, "French Guianan")>>
+		<<set hashPush($nationalities, "Guyanese")>>
+		<<set hashPush($nationalities, "Paraguayan")>>
+		<<set hashPush($nationalities, "Surinamese")>>
+		<<set hashPush($nationalities, "Bhutanese")>>
+		<<set hashPush($nationalities, "East Timorese")>>
+		<<set hashPush($nationalities, "Kyrgyz")>>
+		<<set hashPush($nationalities, "Sri Lankan")>>
+		<<set hashPush($nationalities, "a Liechtensteiner")>>
+		<<set hashPush($nationalities, "Vatican")>>
+		<<set hashPush($nationalities, "Belarusian")>>
+		<<set hashPush($nationalities, "Burundian")>>
+		<<set hashPush($nationalities, "Latvian")>>
+		<<set hashPush($nationalities, "Seychellois")>>
+		<<set hashPush($nationalities, "Slovene")>>
+		<<set hashPush($nationalities, "Antiguan")>>
+		<<set hashPush($nationalities, "Saint Lucian")>>
+		<<set hashPush($nationalities, "Aruban")>>
+		<<set hashPush($nationalities, "Azerbaijani")>>
+		<<set hashPush($nationalities, "Bahraini")>>
+		<<set hashPush($nationalities, "Cypriot")>>
+		<<set hashPush($nationalities, "Georgian")>>
+		<<set hashPush($nationalities, "Kuwaiti")>>
+		<<set hashPush($nationalities, "Qatari")>>
+		<<set hashPush($nationalities, "Tajik")>>
+		<<set hashPush($nationalities, "Turkmen")>>
+		<<set hashPush($nationalities, "Vincentian")>>
+		<<set hashPush($nationalities, "a Cook Islander")>>
+		<<set hashPush($nationalities, "Fijian")>>
+		<<set hashPush($nationalities, "Ni-Vanuatu")>>
+		<<set hashPush($nationalities, "Niuean")>>
+		<<set hashPush($nationalities, "Palestinian")>>
+		<<set hashPush($nationalities, "Samoan")>>
+		<<set hashPush($nationalities, "a Solomon Islander")>>
+		<<set hashPush($nationalities, "Tongan")>>
 	<</if>>
 <</if>>
 <</if>>
diff --git a/src/events/intro/introSummary.tw b/src/events/intro/introSummary.tw
index 54ab15e75c3f1abb5efcce0e2e3270419b8aef83..e4cc8076265e612dc6c25f347333dd6e7bcd2a07 100644
--- a/src/events/intro/introSummary.tw
+++ b/src/events/intro/introSummary.tw
@@ -75,10 +75,10 @@ You are using standardized slave trading channels. [[Customize the slave trade|C
 		<<silently>><<include "Customize Slave Trade">><</silently>>
 	<</if>>
 	<br style="clear:both" /><hr style="margin:0">
-	<<for _i = 0; _i < $nationalitiescheck.length; _i++>>
-	<<set _nation = $nationalitiescheck[_i]>>
-		<<print _nation>> @@.orange;<<print (($nationalities.count(_nation)/$nationalities.length)*100).toFixed(2)>>%@@
-	<<if _i < $nationalitiescheck.length-1>> | <</if>>
+	<<set _len = Object.keys($nationalitiescheck).length>>
+	<<for _nation, _i range $nationalitiescheck>>
+		<<print _nation>> @@.orange;<<print (($nationalities[_nation]/hashSum($nationalities))*100).toFixed(2)>>%@@
+	<<if _i < _len-1>> | <</if>>
 	<</for>>
 	<br style="clear:both" /><hr style="margin:0">
 <</if>> /* closes $customVariety is defined */
diff --git a/src/init/setupVars.tw b/src/init/setupVars.tw
index 18ceda704bb852a199a18273279a7b9aedb01eb7..e47f576de963d326c45f2b3388c7eec55fea6f33 100644
--- a/src/init/setupVars.tw
+++ b/src/init/setupVars.tw
@@ -45,187 +45,184 @@
 
 /*** pregmod exclusive end ***/
 
-/* Helper method to turn objects like {white: 5, black: 2, asian: 1} into weighted arrays */
-<<set window.weightedArray = function(obj) { return _(obj).toPairs().filter(p => _.isSafeInteger(p[1]) && p[1] > 0).flatMap(p => Array(p[1]).fill(p[0])).value(); }>>
-
-/* Nationality-to-race weighted arrays */
+/* Nationality-to-race weighted objects */
 <<set setup.raceSelector = {
-	"Afghan": weightedArray({"indo-aryan": 9, "middle eastern": 9, "mixed race": 2}),
-	"Algerian": weightedArray({"middle eastern": 9, "mixed race": 1}),
-	"American": weightedArray({black: 1, "middle eastern": 1, white: 3, latina: 2, asian: 1, amerindian: 1, "mixed race": 2}),
-	"Argentinian": weightedArray({white: 3, latina: 6, "mixed race": 1}),
-	"Armenian": weightedArray({"indo-aryan": 9, semitic: 9, "mixed race": 2}),
-	"Australian": weightedArray({white: 14, black: 2, asian: 4, "mixed race": 1}),
-	"Austrian": weightedArray({white: 9, "mixed race": 1}),
-	"Bangladeshi": weightedArray({"indo-aryan": 9, "mixed race": 1}),
-	"Belarusian": weightedArray({white: 9, "mixed race": 1}),
-	"Belgian": weightedArray({white: 9, "mixed race": 1}),
-	"Bolivian": weightedArray({latina: 9, amerindian: 9, "mixed race": 2}),
-	"Brazilian": weightedArray({black: 1, latina: 1, "mixed race": 3, amerindian: 1, white: 2, asian: 1}),
-	"British": weightedArray({"indo-aryan": 1, black: 1, white: 8, semitic: 1, "mixed race": 1}),
-	"Burmese": weightedArray({asian: 6, "indo-aryan": 3, "mixed race": 1}),
-	"Canadian": weightedArray({white: 16, asian: 2, amerindian: 2, "mixed race": 1}),
-	"Chilean": weightedArray({white: 2, latina: 6, "mixed race": 1}),
-	"Chinese": weightedArray({asian: 9, "mixed race": 1}),
-	"Colombian": weightedArray({latina: 9, "mixed race": 1}),
-	"Congolese": weightedArray({black: 9, "mixed race": 1}),
-	"Cuban": weightedArray({latina: 9, black: 9, "mixed race": 2}),
-	"Czech": weightedArray({white: 9, "mixed race": 1}),
-	"Danish": weightedArray({white: 9, "mixed race": 1}),
-	"Dominican": weightedArray({"mixed race": 7, white: 2, black: 1}),
-	"Dutch": weightedArray({white: 9, "mixed race": 1}),
-	"Egyptian": weightedArray({black: 2, "middle eastern": 6, semitic: 2, "mixed race": 1}),
-	"Emirati": weightedArray({"middle eastern": 9, "indo-aryan": 9, "mixed race": 2}),
-	"Estonian": weightedArray({white: 9, "mixed race": 1}),
-	"Ethiopian": weightedArray({black: 6, "middle eastern": 2, semitic: 2, "mixed race": 1}),
-	"Filipina": weightedArray({asian: 2, malay: 4, "pacific islander": 2, "mixed race": 1}),
-	"Finnish": weightedArray({white: 9, "mixed race": 1}),
-	"French": weightedArray({black: 1, "middle eastern": 1, white: 5, "southern european": 1, "mixed race": 1}),
-	"German": weightedArray({black: 1, "middle eastern": 1, white: 6, "mixed race": 1}),
-	"Ghanan": weightedArray({black: 6, semitic: 2, "mixed race": 1}),
-	"Greek": weightedArray({"southern european": 9, "mixed race": 1}),
-	"Guatemalan": weightedArray({latina: 9, amerindian: 9, "mixed race": 2}),
-	"Haitian": weightedArray({black: 9, "mixed race": 1}),
-	"Hungarian": weightedArray({white: 8, "indo-aryan": 2, "mixed race": 1}),
-	"Icelandic": weightedArray({white: 9, "mixed race": 1}),
-	"Indian": weightedArray({"indo-aryan": 9, "mixed race": 1}),
-	"Indonesian": weightedArray({asian: 2, malay: 6, "pacific islander": 2, "mixed race": 1}),
-	"Iraqi": weightedArray({semitic: 2, "middle eastern": 8, "mixed race": 1}),
-	"Iranian": weightedArray({"indo-aryan": 6, semitic: 2, "mixed race": 1}),
-	"Irish": weightedArray({white: 9, "mixed race": 1}),
-	"Israeli": weightedArray({white: 2, "middle eastern": 2, semitic: 4, "mixed race": 1}),
-	"Italian": weightedArray({"middle eastern": 2, "southern european": 4, white: 4, "mixed race": 1}),
-	"Jamaican": weightedArray({black: 9, "mixed race": 1}),
-	"Japanese": weightedArray({asian: 49, "mixed race": 1}),
-	"Jordanian": weightedArray({"middle eastern": 9, semitic: 9, "mixed race": 2}),
-	"Kazakh": weightedArray({asian: 6, semitic: 2, "indo-aryan": 2, "mixed race": 1}),
-	"Kenyan": weightedArray({black: 9, "mixed race": 1}),
-	"Korean": weightedArray({asian: 19, "mixed race": 1}),
-	"Lebanese": weightedArray({"middle eastern": 9, semitic: 9, "mixed race": 2}),
-	"Libyan": weightedArray({"middle eastern": 9, "mixed race": 1}),
-	"Lithuanian": weightedArray({white: 49, "mixed race": 1}),
-	"Malaysian": weightedArray({asian: 2, malay: 6, "mixed race": 1}),
-	"Malian": weightedArray({black: 10, "middle eastern": 2, "mixed race": 1}),
-	"Mexican": weightedArray({latina: 5, amerindian: 1, "mixed race": 1}),
-	"Moroccan": weightedArray({"middle eastern": 6, black: 2, "mixed race": 1}),
-	"Nepalese": weightedArray({asian: 6, "indo-aryan": 3, "mixed race": 1}),
-	"a New Zealander": weightedArray({white: 15, asian: 2, "pacific islander": 3, "mixed race": 1}),
-	"Nigerian": weightedArray({black: 9, "mixed race": 1}),
-	"Norwegian": weightedArray({white: 9, "mixed race": 1}),
-	"Omani": weightedArray({"middle eastern": 9, "indo-aryan": 9, "mixed race": 2}),
-	"Pakistani": weightedArray({"indo-aryan": 6, semitic: 2, "mixed race": 1}),
-	"Peruvian": weightedArray({latina: 9, amerindian: 9, "mixed race": 2}),
-	"Polish": weightedArray({white: 49, "mixed race": 1}),
-	"Portuguese": weightedArray({white: 9, "mixed race": 1}),
-	"Puerto Rican": weightedArray({latina: 9, "mixed race": 1}),
-	"Romanian": weightedArray({semitic: 8, white: 33, "indo-aryan": 8, "mixed race": 1}),
-	"Russian": weightedArray({white: 9, "mixed race": 1}),
-	"Saudi": weightedArray({black: 2, asian: 2, "middle eastern": 4, "mixed race": 1}),
-	"Scottish": weightedArray({"middle eastern": 1, "indo-aryan": 1, white: 7, "mixed race": 1}),
-	"Serbian": weightedArray({white: 9, "mixed race": 1}),
-	"Slovak": weightedArray({white: 8, "indo-aryan": 2, "mixed race": 1}),
-	"South African": weightedArray({black: 6, white: 3, "mixed race": 1}),
-	"Spanish": weightedArray({semitic: 3, "southern european": 6, "mixed race": 1}),
-	"Sudanese": weightedArray({black: 6, "middle eastern": 3, "mixed race": 1}),
-	"Swedish": weightedArray({"middle eastern": 2, white: 8, "mixed race": 1}),
-	"Swiss": weightedArray({white: 9, "mixed race": 1}),
-	"Tanzanian": weightedArray({black: 6, semitic: 2, "mixed race": 1}),
-	"Thai": weightedArray({asian: 6, malay: 3, "mixed race": 1}),
-	"Tunisian": weightedArray({"middle eastern": 9, "mixed race": 1}),
-	"Turkish": weightedArray({"middle eastern": 6, semitic: 2, "mixed race": 1}),
-	"Ugandan": weightedArray({black: 9, "mixed race": 1}),
-	"Ukrainian": weightedArray({white: 9, "mixed race": 1}),
-	"Uzbek": weightedArray({asian: 9, "mixed race": 1}),
-	"Venezuelan": weightedArray({latina: 9, "mixed race": 1}),
-	"Vietnamese": weightedArray({asian: 9, "mixed race": 1}),
-	"Yemeni": weightedArray({black: 2, semitic: 2, "middle eastern": 6, "mixed race": 1}),
-	"Zimbabwean": weightedArray({black: 8, white: 2, "mixed race": 1}),
+	"Afghan": {"indo-aryan": 9, "middle eastern": 9, "mixed race": 2},
+	"Algerian": {"middle eastern": 9, "mixed race": 1},
+	"American": {black: 1, "middle eastern": 1, white: 3, latina: 2, asian: 1, amerindian: 1, "mixed race": 2},
+	"Argentinian": {white: 3, latina: 6, "mixed race": 1},
+	"Armenian": {"indo-aryan": 9, semitic: 9, "mixed race": 2},
+	"Australian": {white: 14, black: 2, asian: 4, "mixed race": 1},
+	"Austrian": {white: 9, "mixed race": 1},
+	"Bangladeshi": {"indo-aryan": 9, "mixed race": 1},
+	"Belarusian": {white: 9, "mixed race": 1},
+	"Belgian": {white: 9, "mixed race": 1},
+	"Bolivian": {latina: 9, amerindian: 9, "mixed race": 2},
+	"Brazilian": {black: 1, latina: 1, "mixed race": 3, amerindian: 1, white: 2, asian: 1},
+	"British": {"indo-aryan": 1, black: 1, white: 8, semitic: 1, "mixed race": 1},
+	"Burmese": {asian: 6, "indo-aryan": 3, "mixed race": 1},
+	"Canadian": {white: 16, asian: 2, amerindian: 2, "mixed race": 1},
+	"Chilean": {white: 2, latina: 6, "mixed race": 1},
+	"Chinese": {asian: 9, "mixed race": 1},
+	"Colombian": {latina: 9, "mixed race": 1},
+	"Congolese": {black: 9, "mixed race": 1},
+	"Cuban": {latina: 9, black: 9, "mixed race": 2},
+	"Czech": {white: 9, "mixed race": 1},
+	"Danish": {white: 9, "mixed race": 1},
+	"Dominican": {"mixed race": 7, white: 2, black: 1},
+	"Dutch": {white: 9, "mixed race": 1},
+	"Egyptian": {black: 2, "middle eastern": 6, semitic: 2, "mixed race": 1},
+	"Emirati": {"middle eastern": 9, "indo-aryan": 9, "mixed race": 2},
+	"Estonian": {white: 9, "mixed race": 1},
+	"Ethiopian": {black: 6, "middle eastern": 2, semitic: 2, "mixed race": 1},
+	"Filipina": {asian: 2, malay: 4, "pacific islander": 2, "mixed race": 1},
+	"Finnish": {white: 9, "mixed race": 1},
+	"French": {black: 1, "middle eastern": 1, white: 5, "southern european": 1, "mixed race": 1},
+	"German": {black: 1, "middle eastern": 1, white: 6, "mixed race": 1},
+	"Ghanan": {black: 6, semitic: 2, "mixed race": 1},
+	"Greek": {"southern european": 9, "mixed race": 1},
+	"Guatemalan": {latina: 9, amerindian: 9, "mixed race": 2},
+	"Haitian": {black: 9, "mixed race": 1},
+	"Hungarian": {white: 8, "indo-aryan": 2, "mixed race": 1},
+	"Icelandic": {white: 9, "mixed race": 1},
+	"Indian": {"indo-aryan": 9, "mixed race": 1},
+	"Indonesian": {asian: 2, malay: 6, "pacific islander": 2, "mixed race": 1},
+	"Iraqi": {semitic: 2, "middle eastern": 8, "mixed race": 1},
+	"Iranian": {"indo-aryan": 6, semitic: 2, "mixed race": 1},
+	"Irish": {white: 9, "mixed race": 1},
+	"Israeli": {white: 2, "middle eastern": 2, semitic: 4, "mixed race": 1},
+	"Italian": {"middle eastern": 2, "southern european": 4, white: 4, "mixed race": 1},
+	"Jamaican": {black: 9, "mixed race": 1},
+	"Japanese": {asian: 49, "mixed race": 1},
+	"Jordanian": {"middle eastern": 9, semitic: 9, "mixed race": 2},
+	"Kazakh": {asian: 6, semitic: 2, "indo-aryan": 2, "mixed race": 1},
+	"Kenyan": {black: 9, "mixed race": 1},
+	"Korean": {asian: 19, "mixed race": 1},
+	"Lebanese": {"middle eastern": 9, semitic: 9, "mixed race": 2},
+	"Libyan": {"middle eastern": 9, "mixed race": 1},
+	"Lithuanian": {white: 49, "mixed race": 1},
+	"Malaysian": {asian: 2, malay: 6, "mixed race": 1},
+	"Malian": {black: 10, "middle eastern": 2, "mixed race": 1},
+	"Mexican": {latina: 5, amerindian: 1, "mixed race": 1},
+	"Moroccan": {"middle eastern": 6, black: 2, "mixed race": 1},
+	"Nepalese": {asian: 6, "indo-aryan": 3, "mixed race": 1},
+	"a New Zealander": {white: 15, asian: 2, "pacific islander": 3, "mixed race": 1},
+	"Nigerian": {black: 9, "mixed race": 1},
+	"Norwegian": {white: 9, "mixed race": 1},
+	"Omani": {"middle eastern": 9, "indo-aryan": 9, "mixed race": 2},
+	"Pakistani": {"indo-aryan": 6, semitic: 2, "mixed race": 1},
+	"Peruvian": {latina: 9, amerindian: 9, "mixed race": 2},
+	"Polish": {white: 49, "mixed race": 1},
+	"Portuguese": {white: 9, "mixed race": 1},
+	"Puerto Rican": {latina: 9, "mixed race": 1},
+	"Romanian": {semitic: 8, white: 33, "indo-aryan": 8, "mixed race": 1},
+	"Russian": {white: 9, "mixed race": 1},
+	"Saudi": {black: 2, asian: 2, "middle eastern": 4, "mixed race": 1},
+	"Scottish": {"middle eastern": 1, "indo-aryan": 1, white: 7, "mixed race": 1},
+	"Serbian": {white: 9, "mixed race": 1},
+	"Slovak": {white: 8, "indo-aryan": 2, "mixed race": 1},
+	"South African": {black: 6, white: 3, "mixed race": 1},
+	"Spanish": {semitic: 3, "southern european": 6, "mixed race": 1},
+	"Sudanese": {black: 6, "middle eastern": 3, "mixed race": 1},
+	"Swedish": {"middle eastern": 2, white: 8, "mixed race": 1},
+	"Swiss": {white: 9, "mixed race": 1},
+	"Tanzanian": {black: 6, semitic: 2, "mixed race": 1},
+	"Thai": {asian: 6, malay: 3, "mixed race": 1},
+	"Tunisian": {"middle eastern": 9, "mixed race": 1},
+	"Turkish": {"middle eastern": 6, semitic: 2, "mixed race": 1},
+	"Ugandan": {black: 9, "mixed race": 1},
+	"Ukrainian": {white: 9, "mixed race": 1},
+	"Uzbek": {asian: 9, "mixed race": 1},
+	"Venezuelan": {latina: 9, "mixed race": 1},
+	"Vietnamese": {asian: 9, "mixed race": 1},
+	"Yemeni": {black: 2, semitic: 2, "middle eastern": 6, "mixed race": 1},
+	"Zimbabwean": {black: 8, white: 2, "mixed race": 1},
 	/* these need some love, for now they are default */
-	"Albanian": weightedArray({white: 9, "mixed race": 1}),
-	"Andorran": weightedArray({"southern european": 6, white: 2, "mixed race": 1}),
-	"Antiguan": weightedArray({black: 8, white: 1, "mixed race": 1}),
-	"Aruban": weightedArray({latina: 7, black: 3, "mixed race": 1}),
-	"Azerbaijani": weightedArray({semitic: 6, "indo-aryan": 4, "mixed race": 1}),
-	"Bahamian": weightedArray({black: 8, white: 1, "mixed race": 1}),
-	"Bahraini": weightedArray({"indo-aryan": 9, "middle eastern": 9, "mixed race": 2}),
-	"Barbadian": weightedArray({black: 8, "mixed race": 2}),
-	"Belizean": weightedArray({latina: 7, black: 2, amerindian: 1, "mixed race": 1}),
-	"Bermudian": weightedArray({black: 8, white: 2, "mixed race": 1}),
-	"Bhutanese": weightedArray({asian: 9, "mixed race": 1}),
-	"Bosnian": weightedArray({white: 9, "mixed race": 1}),
-	"Bruneian": weightedArray({malay: 30, asian: 12, "indo-aryan": 8, "mixed race": 1}),
-	"Bulgarian": weightedArray({white: 44, "middle eastern": 4, "indo-aryan": 1, "mixed race": 1}),
-	"Burundian": weightedArray({black: 9, "mixed race": 1}),
-	"Cambodian": weightedArray({asian: 9, "mixed race": 1}),
-	"Cameroonian": weightedArray({black: 9, "mixed race": 1}),
-	"a Cook Islander": weightedArray({"pacific islander": 29, "mixed race": 1}),
-	"Costa Rican": weightedArray({latina: 7, white: 2, "mixed race": 1}),
-	"Croatian": weightedArray({white: 49, "mixed race": 1}),
-	"Cypriot": weightedArray({"southern european": 6, "middle eastern": 3, "mixed race": 1}),
-	"Djiboutian": weightedArray({black: 8, "middle eastern": 2, "mixed race": 1}),
-	"Dominiquais": weightedArray({black: 8, "mixed race": 3}),
-	"East Timorese": weightedArray({malay: 6, "pacific islander": 6, "mixed race": 1}),
-	"Ecuadorian": weightedArray({latina: 8, black: 2, white: 2, amerindian: 2, "mixed race": 1}),
-	"Fijian": weightedArray({"indo-aryan": 6, "pacific islander": 6, "mixed race": 1}),
-	"French Guianan": weightedArray({black: 8, white: 2, "mixed race": 1}),
-	"Gabonese": weightedArray({black: 9, "mixed race": 1}),
-	"Georgian": weightedArray({semitic: 6, "indo-aryan": 5, "mixed race": 1}),
-	"Greenlandic": weightedArray({amerindian: 40, white: 9, "mixed race": 1}),
-	"Grenadian": weightedArray({black: 9, "mixed race": 1}),
-	"Guyanese": weightedArray({black: 4, "indo-aryan": 3, amerindian: 2, "mixed race": 1}),
-	"Honduran": weightedArray({latina: 40, amerindian: 8, "mixed race": 2}),
-	"I-Kiribati": weightedArray({"pacific islander": 49, "mixed race": 1}),
-	"Kittitian": weightedArray({black: 9, "mixed race": 1}),
-	"Kosovan": weightedArray({white: 9, "mixed race": 1}),
-	"Kuwaiti": weightedArray({"middle eastern": 7, "indo-aryan": 4, "mixed race": 1}),
-	"Kyrgyz": weightedArray({asian: 8, white: 2, "mixed race": 1}),
-	"Laotian": weightedArray({asian: 9, "mixed race": 1}),
-	"Latvian": weightedArray({white: 49, "mixed race": 1}),
-	"a Liechtensteiner":  weightedArray({white: 10, "middle eastern": 3, "mixed race": 1}),
-	"Luxembourgian": weightedArray({white: 6, "southern european": 2, "mixed race": 1}),
-	"Macedonian": weightedArray({white: 9, "mixed race": 1}),
-	"Malagasy": weightedArray({black: 4, "indo-aryan": 4, "mixed race": 1}),
-	"Maldivian": weightedArray({"indo-aryan": 9, "mixed race": 1}),
-	"Maltese": weightedArray({"southern european": 9, "mixed race": 1}),
-	"Marshallese": weightedArray({"pacific islander": 9, "mixed race": 1}),
-	"Micronesian": weightedArray({"pacific islander": 9, "mixed race": 1}),
-	"Moldovan": weightedArray({white: 9, "mixed race": 1}),
-	"Monégasque": weightedArray({"southern european": 9, "mixed race": 1}),
-	"Mongolian": weightedArray({asian: 49, "mixed race": 1}),
-	"Montenegrin": weightedArray({white: 9, "mixed race": 1}),
-	"Nauruan": weightedArray({"pacific islander": 49, "mixed race": 1}),
-	"Ni-Vanuatu": weightedArray({"pacific islander": 49, "mixed race": 1}),
-	"Nicaraguan": weightedArray({latina: 10, white: 6, black: 3, "mixed race": 1}),
-	"Nigerien": weightedArray({black: 9, "mixed race": 1}),
-	"Niuean": weightedArray({"pacific islander": 15, white: 7, asian: 7, "mixed race": 1}),
-	"Palauan": weightedArray({"pacific islander": 25, asian: 7, "mixed race": 1}),
-	"Palestinian": weightedArray({"middle eastern": 6, semitic: 2, "mixed race": 1}),
-	"Panamanian": weightedArray({latina: 10, white: 3, black: 3, amerindian: 3, "mixed race": 1}),
-	"Papua New Guinean": weightedArray({malay: 6, "pacific islander": 3, "mixed race": 1}),
-	"Paraguayan": weightedArray({latina: 9, "mixed race": 1}),
-	"Qatari": weightedArray({"middle eastern": 10, "indo-aryan": 5, asian: 2, "mixed race": 1}),
-	"Saint Lucian": weightedArray({black: 9, "mixed race": 1}),
-	"Salvadoran": weightedArray({latina: 7, white: 2, "mixed race": 1}),
-	"Sammarinese": weightedArray({"southern european": 9, "mixed race": 1}),
-	"Samoan": weightedArray({"pacific islander": 49, "mixed race": 1}),
-	"Seychellois": weightedArray({black: 9, "mixed race": 1}),
-	"Singaporean": weightedArray({asian: 30, malay: 12, "indo-aryan": 8, "mixed race": 1}),
-	"Slovene": weightedArray({white: 9, "mixed race": 1}),
-	"a Solomon Islander": weightedArray({"pacific islander": 49, "mixed race": 1}),
-	"Sri Lankan": weightedArray({"indo-aryan": 9, "mixed race": 1}),
-	"Surinamese": weightedArray({black: 6, malay: 3, "indo-aryan": 6, "mixed race": 2}),
-	"Syrian": weightedArray({semitic: 2, "middle eastern": 8, "mixed race": 1}),
-	"Taiwanese": weightedArray({asian: 9, "mixed race": 1}),
-	"Tajik": weightedArray({"indo-aryan": 6, asian: 2, "mixed race": 1}),
-	"Tongan": weightedArray({"pacific islander": 49, "mixed race": 1}),
-	"Trinidadian": weightedArray({black: 3, "indo-aryan": 3, white: 2, "mixed race": 1}),
-	"Turkmen": weightedArray({"indo-aryan": 10, white: 3, "mixed race": 1}),
-	"Tuvaluan": weightedArray({"pacific islander": 9, "mixed race": 1}),
-	"Uruguayan": weightedArray({white: 2, latina: 6, "mixed race": 1}),
-	"Vatican": weightedArray({white: 5, "southern european": 5, "mixed race": 1}),
-	"Vincentian": weightedArray({black: 10, "indo-aryan": 2, "mixed race": 5}),
-	"Zambian": weightedArray({black: 9, "mixed race": 1}),
-	"": weightedArray({white: 9, "mixed race": 1}), /* default mix */
+	"Albanian": {white: 9, "mixed race": 1},
+	"Andorran": {"southern european": 6, white: 2, "mixed race": 1},
+	"Antiguan": {black: 8, white: 1, "mixed race": 1},
+	"Aruban": {latina: 7, black: 3, "mixed race": 1},
+	"Azerbaijani": {semitic: 6, "indo-aryan": 4, "mixed race": 1},
+	"Bahamian": {black: 8, white: 1, "mixed race": 1},
+	"Bahraini": {"indo-aryan": 9, "middle eastern": 9, "mixed race": 2},
+	"Barbadian": {black: 8, "mixed race": 2},
+	"Belizean": {latina: 7, black: 2, amerindian: 1, "mixed race": 1},
+	"Bermudian": {black: 8, white: 2, "mixed race": 1},
+	"Bhutanese": {asian: 9, "mixed race": 1},
+	"Bosnian": {white: 9, "mixed race": 1},
+	"Bruneian": {malay: 30, asian: 12, "indo-aryan": 8, "mixed race": 1},
+	"Bulgarian": {white: 44, "middle eastern": 4, "indo-aryan": 1, "mixed race": 1},
+	"Burundian": {black: 9, "mixed race": 1},
+	"Cambodian": {asian: 9, "mixed race": 1},
+	"Cameroonian": {black: 9, "mixed race": 1},
+	"a Cook Islander": {"pacific islander": 29, "mixed race": 1},
+	"Costa Rican": {latina: 7, white: 2, "mixed race": 1},
+	"Croatian": {white: 49, "mixed race": 1},
+	"Cypriot": {"southern european": 6, "middle eastern": 3, "mixed race": 1},
+	"Djiboutian": {black: 8, "middle eastern": 2, "mixed race": 1},
+	"Dominiquais": {black: 8, "mixed race": 3},
+	"East Timorese": {malay: 6, "pacific islander": 6, "mixed race": 1},
+	"Ecuadorian": {latina: 8, black: 2, white: 2, amerindian: 2, "mixed race": 1},
+	"Fijian": {"indo-aryan": 6, "pacific islander": 6, "mixed race": 1},
+	"French Guianan": {black: 8, white: 2, "mixed race": 1},
+	"Gabonese": {black: 9, "mixed race": 1},
+	"Georgian": {semitic: 6, "indo-aryan": 5, "mixed race": 1},
+	"Greenlandic": {amerindian: 40, white: 9, "mixed race": 1},
+	"Grenadian": {black: 9, "mixed race": 1},
+	"Guyanese": {black: 4, "indo-aryan": 3, amerindian: 2, "mixed race": 1},
+	"Honduran": {latina: 40, amerindian: 8, "mixed race": 2},
+	"I-Kiribati": {"pacific islander": 49, "mixed race": 1},
+	"Kittitian": {black: 9, "mixed race": 1},
+	"Kosovan": {white: 9, "mixed race": 1},
+	"Kuwaiti": {"middle eastern": 7, "indo-aryan": 4, "mixed race": 1},
+	"Kyrgyz": {asian: 8, white: 2, "mixed race": 1},
+	"Laotian": {asian: 9, "mixed race": 1},
+	"Latvian": {white: 49, "mixed race": 1},
+	"a Liechtensteiner":  {white: 10, "middle eastern": 3, "mixed race": 1},
+	"Luxembourgian": {white: 6, "southern european": 2, "mixed race": 1},
+	"Macedonian": {white: 9, "mixed race": 1},
+	"Malagasy": {black: 4, "indo-aryan": 4, "mixed race": 1},
+	"Maldivian": {"indo-aryan": 9, "mixed race": 1},
+	"Maltese": {"southern european": 9, "mixed race": 1},
+	"Marshallese": {"pacific islander": 9, "mixed race": 1},
+	"Micronesian": {"pacific islander": 9, "mixed race": 1},
+	"Moldovan": {white: 9, "mixed race": 1},
+	"Monégasque": {"southern european": 9, "mixed race": 1},
+	"Mongolian": {asian: 49, "mixed race": 1},
+	"Montenegrin": {white: 9, "mixed race": 1},
+	"Nauruan": {"pacific islander": 49, "mixed race": 1},
+	"Ni-Vanuatu": {"pacific islander": 49, "mixed race": 1},
+	"Nicaraguan": {latina: 10, white: 6, black: 3, "mixed race": 1},
+	"Nigerien": {black: 9, "mixed race": 1},
+	"Niuean": {"pacific islander": 15, white: 7, asian: 7, "mixed race": 1},
+	"Palauan": {"pacific islander": 25, asian: 7, "mixed race": 1},
+	"Palestinian": {"middle eastern": 6, semitic: 2, "mixed race": 1},
+	"Panamanian": {latina: 10, white: 3, black: 3, amerindian: 3, "mixed race": 1},
+	"Papua New Guinean": {malay: 6, "pacific islander": 3, "mixed race": 1},
+	"Paraguayan": {latina: 9, "mixed race": 1},
+	"Qatari": {"middle eastern": 10, "indo-aryan": 5, asian: 2, "mixed race": 1},
+	"Saint Lucian": {black: 9, "mixed race": 1},
+	"Salvadoran": {latina: 7, white: 2, "mixed race": 1},
+	"Sammarinese": {"southern european": 9, "mixed race": 1},
+	"Samoan": {"pacific islander": 49, "mixed race": 1},
+	"Seychellois": {black: 9, "mixed race": 1},
+	"Singaporean": {asian: 30, malay: 12, "indo-aryan": 8, "mixed race": 1},
+	"Slovene": {white: 9, "mixed race": 1},
+	"a Solomon Islander": {"pacific islander": 49, "mixed race": 1},
+	"Sri Lankan": {"indo-aryan": 9, "mixed race": 1},
+	"Surinamese": {black: 6, malay: 3, "indo-aryan": 6, "mixed race": 2},
+	"Syrian": {semitic: 2, "middle eastern": 8, "mixed race": 1},
+	"Taiwanese": {asian: 9, "mixed race": 1},
+	"Tajik": {"indo-aryan": 6, asian: 2, "mixed race": 1},
+	"Tongan": {"pacific islander": 49, "mixed race": 1},
+	"Trinidadian": {black: 3, "indo-aryan": 3, white: 2, "mixed race": 1},
+	"Turkmen": {"indo-aryan": 10, white: 3, "mixed race": 1},
+	"Tuvaluan": {"pacific islander": 9, "mixed race": 1},
+	"Uruguayan": {white: 2, latina: 6, "mixed race": 1},
+	"Vatican": {white: 5, "southern european": 5, "mixed race": 1},
+	"Vincentian": {black: 10, "indo-aryan": 2, "mixed race": 5},
+	"Zambian": {black: 9, "mixed race": 1},
+	"": {"white": 9, "mixed race": 1}, /* default mix */
 }>>
 
 <<set setup.servantMilkersJobs = ["be a servant", "work as a servant", "take classes", "please you", "be a subordinate slave", "stay confined", "recruit girls", "rest"]>>
diff --git a/src/js/utilJS.tw b/src/js/utilJS.tw
index b8e9a9de8e65690bf4c010b9469d36a14fe9d160..dc94341a165cdf1716822b331fd8d6783ebc8458 100644
--- a/src/js/utilJS.tw
+++ b/src/js/utilJS.tw
@@ -403,7 +403,7 @@ window.numberWithCommas = function(x) {
 window.jsRandom = function(min,max) {
     return Math.floor(Math.random()*(max-min+1)+min);
 }
-
+/*
 window.jsRandomMany = function (arr, count) {
 	var result = [];
 	var _tmp = arr.slice();
@@ -443,3 +443,39 @@ if(typeof Categorizer === 'function') {
 }
 */
 jQuery(document).trigger('categorizer.ready');
+
+
+window.hashChoice = function hashChoice(obj) {
+	let randint = Math.floor(Math.random()*hashSum(obj));
+	let ret;
+	Object.keys(obj).some(key => {
+		if (randint < obj[key]) {
+			ret = key;
+			return true;
+		} else {
+			randint -= obj[key];
+			return false;
+		}
+	});
+	return ret;
+};
+
+window.hashSum = function hashSum(obj) {
+	let sum = 0;
+	Object.keys(obj).forEach(key => { sum += obj[key]; });
+	return sum;
+};
+
+window.arr2obj = function arr2obj(arr) {
+	const obj = {};
+	arr.forEach(item => { obj[item] = 1; });
+	return obj;
+};
+
+window.hashPush = function hashPush(obj, ...rest) {
+	rest.forEach(item => {
+		if (obj[item] === undefined) obj[item] = 1;
+		else obj[item] += 1;
+	});
+};
+
diff --git a/src/npc/startingGirls/startingGirls.tw b/src/npc/startingGirls/startingGirls.tw
index bb171a501f1b0ecee71721b9d4530be67ac1d433..7afaf888e781f569c8dd20c3842c9c740faae0ac 100644
--- a/src/npc/startingGirls/startingGirls.tw
+++ b/src/npc/startingGirls/startingGirls.tw
@@ -401,7 +401,7 @@ __You are customizing this slave:__
 | [[More customization options]]
 
 | <<link "Start over with a random slave">>
-<<set $fixedNationality = $nationalities.random()>>
+<<set $fixedNationality = hashChoice($nationalities)>>
 <<StartingGirlsWorkaround>>
 <<StartingGirlsRefresh>>
 <<SaleDescription>>
diff --git a/src/pregmod/basenationalitiesControls.tw b/src/pregmod/basenationalitiesControls.tw
index a4ca9501ff17042828615842b7f652e7870c9c02..f2bf7463f4069852ff2e40fd4f98847d3daaa32c 100644
--- a/src/pregmod/basenationalitiesControls.tw
+++ b/src/pregmod/basenationalitiesControls.tw
@@ -1,6 +1,6 @@
 :: Basenationalities Controls [nobr]
 
-<<if $nationalities.length < 1>>
+<<if hashSum($nationalities) < 1>>
 	//You cannot be a slave owner without a slave trade. Please add nationalities to continue.//
 <<else>>
 	<<link "Confirm customization">>
@@ -15,14 +15,14 @@
 <br>
 
 /* Generates cloned array of $nationalities, removing duplicates and then sorting */
-<<set $nationalitiescheck = _.uniq($nationalities, false).sort()>>
+<<set $nationalitiescheck = Object.assign({}, $nationalities)>>
 
 /* Prints distribution of $nationalities, using $nationalitiescheck to render array */
-<<set _percentPerPoint = 100.0 / $nationalities.length>>
-<<for _i = 0; _i < $nationalitiescheck.length; _i++>>
-	<<set _nation = $nationalitiescheck[_i]>>
-	_nation @@.orange;<<= ($nationalities.count(_nation) * _percentPerPoint).toFixed(2)>>%@@
-	<<if _i < $nationalitiescheck.length-1>> | <</if>>
+<<set _percentPerPoint = 100.0 / hashSum($nationalities)>>
+<<set _len = Object.keys($nationalitiescheck).length>>
+<<for _nation, _i range $nationalitiescheck>>
+	_nation @@.orange;<<= ($nationalities[_nation] * _percentPerPoint).toFixed(2)>>%@@
+	<<if _i < _len-1>> | <</if>>
 <</for>>
 <<unset _percentPerPoint>>
 <br><br>
@@ -78,22 +78,22 @@ Filter by Region:
 		<<print "
 		_nation 
 			@@.plusButton;<<link '+'>>
-				<<set $nationalities.push(setup.baseNationalities[" + _i + "])>>
+				<<set hashPush($nationalities, '" + _nation + "')>>
 				<<replace '#PopControl'>><<include 'Basenationalities Controls'>><</replace>>
 			<</link>>@@
 		">>
-	<<if $nationalitiescheck.includes(_nation) > 0 >>
+	<<if def $nationalitiescheck[_nation] >>
 		<<print "
 			@@.minusButton;<<link '–'>>
-				<<set $nationalities.deleteAt(($nationalities.indexOf(setup.baseNationalities[" + _i + "])))>>
+				<<set $nationalities['" + _nation + "'] -= 1>>
 				<<replace '#PopControl'>><<include 'Basenationalities Controls'>><</replace>>
 			<</link>>@@
 		">>
 		<</if>>
-	<<if $nationalities.count(_nation) > 1 >>
+	<<if $nationalities[_nation] > 1 >>
 		<<print "
 			@@.zeroButton;<<link '0'>>
-				<<set $nationalities.delete(setup.baseNationalities[" + _i + "])>>
+				<<set delete $nationalities['" + _nation + "']>>
 				<<replace '#PopControl'>><<include 'Basenationalities Controls'>><</replace>>
 			<</link>>@@
 		">>
@@ -105,19 +105,19 @@ Filter by Region:
 	<<foreach _race of setup.filterRaces>>
 		<<set _racialNationalities = setup.baseNationalities.filter(function(n) {
 			var races = setup.raceSelector[n] || setup.raceSelector[''];
-			return races.count(_race.toLowerCase()) * 2 > races.length; })>>
+			return races[_race.toLowerCase()] * 2 > hashSum(races); })>>
 		<<if _racialNationalities.length > 0>>
 			<<= "<div style='float: left; width: 13em; padding: 0 5px;' title='"
 				+ (_racialNationalities.length > 0 ? _racialNationalities.join(", ") : "(none)") 
 				+"'>_race @@.plusButton; <<link '+'>>
-				<<run Array.prototype.push.apply($nationalities, setup.baseNationalities.filter(function(n) {
+				<<run setup.baseNationalities.filter(function(n) {
 						var races = setup.raceSelector[n] || setup.raceSelector[''];
-						return races.count('" + _race.toLowerCase() + "') * 2 > races.length; }))>>
+						return races['" + _race.toLowerCase() + "'] * 2 > hashSum(races); }).forEach(function(n) { hashPush($nationalities, n);})>>
 				<<replace '#PopControl'>><<include 'Basenationalities Controls'>><</replace>>
 			<</link>>@@ @@.zeroButton;<<link '0'>>
-				<<run Array.prototype.delete.apply($nationalities, setup.baseNationalities.filter(function(n) {
+				<<run setup.baseNationalities.filter(function(n) {
 						var races = setup.raceSelector[n] || setup.raceSelector[''];
-						return races.count('" + _race.toLowerCase() + "') * 2 > races.length; }))>>
+						return races['" + _race.toLowerCase() + "'] * 2 > hashSum(races.length); }).forEach(function(n) { delete $nationalities[n]; })>>
 				<<replace '#PopControl'>><<include 'Basenationalities Controls'>><</replace>>
 			<</link>>@@</div>">>
 		<</if>>
@@ -131,22 +131,22 @@ Filter by Region:
 		<<print "
 		_nation 
 			@@.plusButton;<<link '+'>>
-				<<set $nationalities.push(_controlsNationality[" + _i + "])>>
+				<<set hashPush($nationalities, _controlsNationality[" + _i + "])>>
 				<<replace '#PopControl'>><<include 'Basenationalities Controls'>><</replace>>
 			<</link>>@@
 		">>
-	<<if $nationalitiescheck.includes(_nation) > 0 >>
+	<<if def $nationalitiescheck[_nation]>>
 		<<print "
 			@@.minusButton;<<link '–'>>
-				<<set $nationalities.deleteAt(($nationalities.indexOf(_controlsNationality[" + _i + "])))>>
+				<<set $nationalities[" + _nation + "] -= 1>>
 				<<replace '#PopControl'>><<include 'Basenationalities Controls'>><</replace>>
 			<</link>>@@
 		">>
 		<</if>>
-	<<if $nationalities.count(_nation) > 1 >>
+	<<if $nationalities[_nation] > 1 >>
 		<<print "
 			@@.zeroButton;<<link '0'>>
-				<<set $nationalities.delete(_controlsNationality[" + _i + "])>>
+				<<set delete $nationalities['" + _nation + "']>>
 				<<replace '#PopControl'>><<include 'Basenationalities Controls'>><</replace>>
 			<</link>>@@
 		">>
@@ -156,4 +156,4 @@ Filter by Region:
 	<</for>>
 <</if>>
 <div style="clear: both; height: 0;"></div>
-</div>
\ No newline at end of file
+</div>
diff --git a/src/pregmod/customizeSlaveTrade.tw b/src/pregmod/customizeSlaveTrade.tw
index bd3cc3f9d13ee972e2eeb11178fa05a2c108222e..9bed5816c428666b447cbccbe7483faa8761b2dc 100644
--- a/src/pregmod/customizeSlaveTrade.tw
+++ b/src/pregmod/customizeSlaveTrade.tw
@@ -1,9 +1,7 @@
 :: Customize Slave Trade [nobr]
 
 <<if ndef $nationalities>>
-	<<set $nationalities = []>>
-<<else>>
-	<<set $nationalities.sort()>>
+	<<set $nationalities = {}>>
 <</if>>
 <<if ndef $baseControlsFilter>>
 	<<set $baseControlsFilter = "all">>
@@ -18,7 +16,7 @@ When civilization turned upon itself, some countries readily took to enslaving t
 <br><br>
 <span id="PopControl"><<include "Basenationalities Controls">></span>
 <br>
-[[Reset filters|passage()][$baseControlsFilter = "all"]] | [[Clear all nationalities|passage()][$nationalities = []]]
+[[Reset filters|passage()][$baseControlsFilter = "all"]] | [[Clear all nationalities|passage()][$nationalities = {}]]
 <br style="clear:both" /><hr style="margin:0">
 Vanilla presets:
 <span id="vanilla-presets"></span>
@@ -44,4 +42,4 @@ var widgets = Story.widgets
 	.filter(function(w) { return Macro.has(w.replace(/[<>]/g, '')); })
 	.sort().join(' | ');
 setTimeout(function() { new Wikifier(jQuery('#mod-presets'), widgets); }, 0);
-<</script>>
\ No newline at end of file
+<</script>>
diff --git a/src/pregmod/widgets/pregmodWidgets.tw b/src/pregmod/widgets/pregmodWidgets.tw
index 7a3211072bc95e71207bd527792c3adcbd67f7be..c2db50c99d71237cc9db000a4ea0a6c1b791e87c 100644
--- a/src/pregmod/widgets/pregmodWidgets.tw
+++ b/src/pregmod/widgets/pregmodWidgets.tw
@@ -1896,13 +1896,13 @@ Of $possessive $slaves[$i].pregType child<<if $slaves[$i].pregType > 1>>ren<</if
 		s.nationality = setup.nationalityPoolSelector[Object.keys(setup.nationalityPoolSelector).random()].random();
 		/* 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] && !setup.raceSelector[s.nationality].includes(s.race)) {
+			while(setup.raceSelector[s.nationality] && !(s.race in setup.raceSelector[s.nationality])) {
 				s.nationality = setup.nationalityPoolSelector[Object.keys(setup.nationalityPoolSelector).random()].random();
 			}
 		}
 	}
 	if(!s.race || !validRaces.includes(s.race)) {
-		s.race = (setup.raceSelector[s.nationality] || setup.raceSelector[""]).random();
+		s.race = hashChoice(setup.raceSelector[s.nationality] || setup.raceSelector[""]);
 	}
 	if(!s.birthSurname) {
 		s.birthSurname = (setup.surnamePoolSelector[s.nationality + "." + s.race]
@@ -1941,4 +1941,4 @@ Call as <<HSM>>
 	<<elseif $PC.hacking >= 100>>
 		<<set $HackingSkillMultiplier = .75>>
 	<</if>>
-<</widget>>
\ No newline at end of file
+<</widget>>
diff --git a/src/pregmod/widgets/slaveTradePresetWidgets.tw b/src/pregmod/widgets/slaveTradePresetWidgets.tw
index d59f4b880c53e4dc05a572f521636ec44d7c9c8f..b4bfb5cd5cb4ffcf9d33deec5bba636b21337870 100644
--- a/src/pregmod/widgets/slaveTradePresetWidgets.tw
+++ b/src/pregmod/widgets/slaveTradePresetWidgets.tw
@@ -5,7 +5,7 @@
 
 <<widget "NationalityPresetVanillaGlobal">>
 <<link "Vanilla Global">>
-	<<set $nationalities = weightedArray({
+	<<set $nationalities = {
 		Afghan: 2,
 		Albanian: 1,
 		Algerian: 3,
@@ -180,7 +180,7 @@
 		Zambian: 1,
 		Zimbabwean: 2,
 		"a New Zealander": 2
-		})>>
+		}>>
 	<<set _gotoPassage = passage()>>
 	<<goto _gotoPassage>>
 <</link>>
@@ -188,7 +188,7 @@
 
 <<widget "NationalityPresetVanillaNA">>
 <<link "Vanilla North America">>
-	<<set $nationalities = weightedArray({
+	<<set $nationalities = {
 		American: 6,
 		Canadian: 2,
 		Mexican: 3,
@@ -207,7 +207,7 @@
 		Salvadoran: 1,
 		Nicaraguan: 1,
 		Panamanian: 1
-		})>>
+		}>>
 	<<set _gotoPassage = passage()>>
 	<<goto _gotoPassage>>
 <</link>>
@@ -215,7 +215,7 @@
 
 <<widget "NationalityPresetVanillaSA">>
 <<link "Vanilla South America">>
-	<<set $nationalities = weightedArray({
+	<<set $nationalities = {
 		Brazilian: 4,
 		Argentinian: 2,
 		Colombian: 2,
@@ -230,7 +230,7 @@
 		Guyanese: 1,
 		Paraguayan: 1,
 		Surinamese: 1
-		})>>
+		}>>
 	<<set _gotoPassage = passage()>>
 	<<goto _gotoPassage>>
 <</link>>
@@ -238,7 +238,7 @@
 
 <<widget "NationalityPresetVanillaME">>
 <<link "Vanilla Middle East">>
-	<<set $nationalities = weightedArray({
+	<<set $nationalities = {
 		Egyptian: 3,
 		Iranian: 2,
 		Saudi: 2,
@@ -260,7 +260,7 @@
 		Kuwaiti: 1,
 		Qatari: 1,
 		Palestinian: 1
-		})>>
+		}>>
 	<<set _gotoPassage = passage()>>
 	<<goto _gotoPassage>>
 <</link>>
@@ -268,7 +268,7 @@
 
 <<widget "NationalityPresetVanillaAfrica">>
 <<link "Vanilla Africa">>
-	<<set $nationalities = weightedArray({
+	<<set $nationalities = {
 		Nigerian: 3,
 		"South African": 3,
 		Kenyan: 2,
@@ -292,7 +292,7 @@
 		Nigerien: 1,
 		Burundian: 1,
 		Seychellois: 1
-		})>>
+		}>>
 	<<set _gotoPassage = passage()>>
 	<<goto _gotoPassage>>
 <</link>>
@@ -300,7 +300,7 @@
 
 <<widget "NationalityPresetVanillaAsia">>
 <<link "Vanilla Asia">>
-	<<set $nationalities = weightedArray({
+	<<set $nationalities = {
 		Chinese: 14,
 		Indian: 10,
 		Bangladeshi: 3,
@@ -328,7 +328,7 @@
 		"Sri Lankan": 1,
 		Tajik: 1,
 		Turkmen: 1
-		})>>
+		}>>
 	<<set _gotoPassage = passage()>>
 	<<goto _gotoPassage>>
 <</link>>
@@ -336,7 +336,7 @@
 
 <<widget "NationalityPresetVanillaEU">>
 <<link "Vanilla Europe">>
-	<<set $nationalities = weightedArray({
+	<<set $nationalities = {
 		Russian: 4,
 		German: 3,
 		Belarusian: 1,
@@ -382,7 +382,7 @@
 		Vatican: 1,
 		Latvian: 1,
 		Slovene: 1
-		})>>
+		}>>
 	<<set _gotoPassage = passage()>>
 	<<goto _gotoPassage>>
 <</link>>
@@ -390,7 +390,7 @@
 
 <<widget "NationalityPresetVanillaAU">>
 <<link "Vanilla Australia">>
-	<<set $nationalities = weightedArray({
+	<<set $nationalities = {
 		Australian: 3,
 		"a New Zealander": 1,
 		Marshallese: 1,
@@ -407,7 +407,7 @@
 		Samoan: 1,
 		"a Solomon Islander": 1,
 		Tongan: 1
-		})>>
+		}>>
 	<<set _gotoPassage = passage()>>
 	<<goto _gotoPassage>>
 <</link>>
@@ -416,7 +416,7 @@
 /* I need reweighting and possibly country additions */
 <<widget "NationalityPresetModEurope">>
 <<link "Europe">>
-	<<set $nationalities = weightedArray({
+	<<set $nationalities = {
 		Albanian: 29,
 		Andorran: 1,
 		Austrian: 87,
@@ -465,7 +465,7 @@
 		Ukrainian: 442,
 		"a Liechtensteiner": 1,
 		Vatican: 1		
-		})>>
+		}>>
 	<<set _gotoPassage = passage()>>
 	<<goto _gotoPassage>>
 <</link>>
@@ -473,7 +473,7 @@
 
 <<widget "NationalityPresetModEastAsia">>
 <<link "East Asia">>
-	<<set $nationalities = weightedArray({Chinese: 21, Japanese: 2, Korean: 1})>>
+	<<set $nationalities = {Chinese: 21, Japanese: 2, Korean: 1}>>
 	<<set _gotoPassage = passage()>>
 	<<goto _gotoPassage>>
 <</link>>
@@ -481,7 +481,7 @@
 
 <<widget "NationalityPresetModUSA">>
 <<link USA>>
-	<<set $nationalities = weightedArray({American: 8, Canadian: 1, Mexican: 3})>>
+	<<set $nationalities = {American: 8, Canadian: 1, Mexican: 3}>>
 	<<set _gotoPassage = passage()>>
 	<<goto _gotoPassage>>
 <</link>>
@@ -489,7 +489,7 @@
 
 <<widget "NationalityPresetModJapan">>
 <<link Japan>>
-	<<set $nationalities = weightedArray({Japanese: 3})>>
+	<<set $nationalities = {Japanese: 3}>>
 	<<set _gotoPassage = passage()>>
 	<<goto _gotoPassage>>
 <</link>>
@@ -497,7 +497,7 @@
 
 <<widget "NationalityPresetModBrazil">>
 <<link Brazil>>
-	<<set $nationalities = weightedArray({
+	<<set $nationalities = {
 		Brazilian: 30,
 		Argentinian: 4,
 		Colombian: 3,
@@ -509,7 +509,7 @@
 		Uruguayan: 2,
 		Paraguayan: 1,
 		Ecuadorian: 1
-		})>>
+		}>>
 	<<set _gotoPassage = passage()>>
 	<<goto _gotoPassage>>
 <</link>>
@@ -518,7 +518,7 @@
 /* I need reweighting */
 <<widget "NationalityPresetModGlobalRealism">>
 <<link "Global Realism">>
-	<<set $nationalities = weightedArray({
+	<<set $nationalities = {
 		Afghan: 355,
 		Albanian: 29,
 		Algerian: 413,
@@ -693,8 +693,8 @@
 		Zambian: 171,
 		Zimbabwean: 165,
 		"a New Zealander": 47
-		})>>
+		}>>
 	<<set _gotoPassage = passage()>>
 	<<goto _gotoPassage>>
 <</link>>
-<</widget>>
\ No newline at end of file
+<</widget>>
diff --git a/src/uncategorized/generateXXSlave.tw b/src/uncategorized/generateXXSlave.tw
index ee10a4b1501f5aa482e10caaec59c557d4d5aeda..8cebddadd5d46d8cad385cceacd7b8a5bc11964a 100644
--- a/src/uncategorized/generateXXSlave.tw
+++ b/src/uncategorized/generateXXSlave.tw
@@ -143,7 +143,7 @@
 /% Begin height replacement section. %/
 /% Since we use nationality for height effects we need to initialize it now instead of later on like in vanilla Free Cities. %/
 <<if $fixedNationality == 0>>
-	<<set $activeSlave.nationality = $nationalities.random()>>
+	<<set $activeSlave.nationality = hashChoice($nationalities)>>
 <<else>>
 	<<set $activeSlave.nationality = $fixedNationality>>
 <</if>>
@@ -157,7 +157,7 @@
 		<<set _capUpgradeNationalities = []>>
 		<<for _u = 0; _u < _capUpgradeCheck.length; _u++>>
 			<<set _capNation = _capUpgradeCheck[_u]>>
-			<<if $nationalities.includes(_capNation)>>
+			<<if _capNation in $nationalities>>
 				<<set _capUpgradeNationalities.push(_capNation)>>
 			<</if>>
 		<</for>>
diff --git a/src/uncategorized/generateXYSlave.tw b/src/uncategorized/generateXYSlave.tw
index 24fdd8bb1386ff85d0c2501bf2711ea5453ed6ab..37c4d98a34c921d74202e34979441b20345fc208 100644
--- a/src/uncategorized/generateXYSlave.tw
+++ b/src/uncategorized/generateXYSlave.tw
@@ -141,7 +141,7 @@
 /% Since we use nationality for height effects we need to initialize it now instead of later on like in vanilla Free Cities. %/
 
 <<if $fixedNationality == 0>>
-	<<set $activeSlave.nationality = $nationalities.random()>>
+	<<set $activeSlave.nationality = hashChoice($nationalities)>>
 <<else>>
 	<<set $activeSlave.nationality = $fixedNationality>>
 <</if>>
@@ -155,7 +155,7 @@
 		<<set _capUpgradeNationalities = []>>
 		<<for _u = 0; _u < _capUpgradeCheck.length; _u++>>
 			<<set _capNation = _capUpgradeCheck[_u]>>
-			<<if $nationalities.includes(_capNation)>>
+			<<if _capNation in $nationalities)>>
 				<<set _capUpgradeNationalities.push(_capNation)>>
 			<</if>>
 		<</for>>
diff --git a/src/uncategorized/slaveGenerationWidgets.tw b/src/uncategorized/slaveGenerationWidgets.tw
index 27ba8fede099883ac29d6b77419ab513c5b150ef..88a8f9c2b730b1e3a8a8a9677909c3b8936f3037 100644
--- a/src/uncategorized/slaveGenerationWidgets.tw
+++ b/src/uncategorized/slaveGenerationWidgets.tw
@@ -2,7 +2,7 @@
 
 <<widget "NationalityToRace">>
 <<set $args[0].race
-	= (setup.raceSelector[$args[0].nationality] || setup.raceSelector[""]).random()>>
+	= hashChoice(setup.raceSelector[$args[0].nationality] || setup.raceSelector[""])>>
 <</widget>>
 
 <<widget "NationalityToName">>