diff --git a/src/js/futureSocietyJS.js b/src/js/futureSocietyJS.js
index 1acce03ff5659e9377fb997d13b63348d8de1c2c..d0f12b4330a61b4ab894c712a0fc33057445d4bf 100644
--- a/src/js/futureSocietyJS.js
+++ b/src/js/futureSocietyJS.js
@@ -1,6 +1,6 @@
 globalThis.FutureSocieties = (function() {
 	"use strict";
-	const FSString2Property = { // blame Hedonism and Eugenics for this
+	const FSString2Property = { // blame Hedonism and Eugenics for this - TODO: probably can be cleaned up, maybe eliminated
 		Supremacist: "FSSupremacist",
 		Subjugationist: "FSSubjugationist",
 		GenderRadicalist: "FSGenderRadicalist",
@@ -18,6 +18,7 @@ globalThis.FutureSocieties = (function() {
 		Hedonistic: "FSHedonisticDecadence",
 		Hedonism: "FSHedonisticDecadence",
 		ChattelReligionist: "FSChattelReligionist",
+		Multiculturalist: "FSNull",
 		RomanRevivalist: "FSRomanRevivalist",
 		EgyptianRevivalist: "FSEgyptianRevivalist",
 		EdoRevivalist: "FSEdoRevivalist",
@@ -35,9 +36,66 @@ globalThis.FutureSocieties = (function() {
 	const SocietyList = [...new Set(Object.keys(FSString2Property).map(key => FSString2Property[key]))]; // This returns an array containing the unique values of FSString2Property. E.g. "FSSupremacist" and "FSSubjugationist"
 	const NPCSocietyList = [ "FSCummunism", "FSIncestFetishist" ]; // NPC arcologies may use these FSes, but the PC can't
 
+	const FSMutexGroups = [
+		[ "FSSupremacist" ],
+		[ "FSSubjugationist" ],
+		[ "FSGenderRadicalist", "FSGenderFundamentalist" ],
+		[ "FSDegradationist", "FSPaternalist" ],
+		[ "FSBodyPurist", "FSTransformationFetishist" ],
+		[ "FSYouthPreferentialist", "FSMaturityPreferentialist" ],
+		[ "FSSlimnessEnthusiast", "FSAssetExpansionist" ],
+		[ "FSPastoralist", "FSCummunism" ],
+		[ "FSPhysicalIdealist", "FSHedonisticDecadence" ],
+		[ "FSChattelReligionist", "FSNull" ],
+		[ "FSIncestFetishist" ],
+		[ "FSRomanRevivalist", "FSEgyptianRevivalist", "FSEdoRevivalist", "FSArabianRevivalist", "FSChineseRevivalist", "FSAztecRevivalist" ],
+		[ "FSRepopulationFocus", "FSRestart" ],
+		[ "FSIntellectualDependency", "FSSlaveProfessionalism" ],
+		[ "FSPetiteAdmiration", "FSStatuesqueGlorification"]
+	];
+
+	const DisplayName = {
+		FSSupremacist: {noun: "Racial Supremacy", adj: "Supremacist"},
+		FSSubjugationist: {noun: "Racial Subjugationism", adj: "Subjugationist"},
+		FSGenderRadicalist: {noun: "Gender Radicalism", adj: "Gender Radicalist"},
+		FSGenderFundamentalist: {noun: "Gender Fundamentalism", adj: "Gender Fundamentalist"},
+		FSDegradationist: {noun: "Degradationism", adj: "Degradationist"},
+		FSPaternalist: {noun: "Paternalism", adj: "Paternalist"},
+		FSBodyPurist: {noun: "Body Purism", adj: "Body Purist"},
+		FSTransformationFetishist: {noun: "Transformation Fetishism", adj: "Transformation Fetishist"},
+		FSYouthPreferentialist: {noun: "Youth Preferentialism", adj: "Youth Preferentialist"},
+		FSMaturityPreferentialist: {noun: "Maturity Preferentialism", adj: "Maturity Preferentialist"},
+		FSSlimnessEnthusiast: {noun: "Slimness Enthusiasm", adj: "Slimness Enthusiast"},
+		FSAssetExpansionist: {noun: "Asset Expansionism", adj: "Asset Expansionist"},
+		FSPastoralist: {noun: "Pastoralism", adj: "Pastoralist"},
+		FSCummunism: {noun: "Cummunism", adj: "Cummunist"},
+		FSPhysicalIdealist: {noun: "Physical Idealism", adj: "Physical Idealist"},
+		FSHedonisticDecadence: {noun: "Decadent Hedonism", adj: "Decadent Hedonist"},
+		FSChattelReligionist: {noun: "Chattel Religionism", adj: "Chattel Religionist"},
+		FSNull: {noun: "Multiculturalism", adj: "Multiculturalist"},
+		FSIncestFetishist: {noun: "Incest Fetishism", adj: "Incest Fetishist"},
+		FSRomanRevivalist: {noun: "Roman Revivalism", adj: "Roman Revivalist"},
+		FSEgyptianRevivalist: {noun: "Egyptian Revivalism", adj: "Egyptian Revivalist"},
+		FSEdoRevivalist: {noun: "Edo Revivalism", adj: "Edo Revivalist"},
+		FSArabianRevivalist: {noun: "Arabian Revivalism", adj: "Arabian Revivalist"},
+		FSChineseRevivalist: {noun: "Chinese Revivalism", adj: "Chinese Revivalist"},
+		FSAztecRevivalist: {noun: "Aztec Revivalism", adj: "Aztec Revivalist"},
+		FSRepopulationFocus: {noun: "Repopulation Focus", adj: "Repopulationist"},
+		FSRestart: {noun: "Eugenics", adj: "Eugenics"},
+		FSIntellectualDependency: {noun: "Intellectual Dependency", adj: "Intellectual Dependency"},
+		FSSlaveProfessionalism: {noun: "Slave Professionalism", adj: "Slave Professional"},
+		FSPetiteAdmiration: {noun: "Petite Admiration", adj: "Petite Admiration"},
+		FSStatuesqueGlorification: {noun: "Statuesque Glorification", adj: "Statuesque Glorification"}
+	};
+
 	return {
 		activeCount: activeCount,
 		applyBroadProgress: applyBroadProgress,
+		influenceSources: influenceSources,
+		diplomaticFSes: diplomaticFSes,
+		displayName: displayName,
+		displayAdj: displayAdj,
+		decay: decayFSes,
 		overflowToInfluence: overflowToInfluence,
 		remove: removeFS,
 		DecorationCleanup: DecorationCleanup,
@@ -46,39 +104,178 @@ globalThis.FutureSocieties = (function() {
 		HighestDecoration: FSHighestDecoration
 	};
 
-	// helper function, not callable externally
+	/** get the list of FSes active for a particular arcology
+	 * helper function, not callable externally
+	 * @param {number} arcologyID
+	 * @returns {Array<string>}
+	 */
 	function activeFSes(arcologyID) {
 		let isSet = (fs) => V.arcologies[arcologyID][fs] !== "unset";
 		const npcFSes = arcologyID !== 0 ? NPCSocietyList.filter(isSet) : [];
 		return SocietyList.filter(isSet).concat(npcFSes);
 	}
 
-	// call as FutureSocieties.activeCount(arcologyID)
+	/** call as FutureSocieties.activeCount(arcologyID)
+	 * @param {number} arcologyID
+	 * @returns {number}
+	 */
 	function activeCount(arcologyID) {
 		return activeFSes(arcologyID).length;
 	}
 
-	// call as FutureSocieties.applyBroadProgress(arcologyID, progress)
+	/** call as FutureSocieties.applyBroadProgress(arcologyID, progress)
+	 * @param {number} arcologyID
+	 * @param {number} progress
+	 */
 	function applyBroadProgress(arcologyID, progress) {
 		for (const fs of activeFSes(arcologyID)) {
-			V.arcologies[arcologyID][fs] += progress;
+			if (fs !== "FSNull") { // does not progress this way
+				V.arcologies[arcologyID][fs] += progress;
+			}
 		}
 	}
 
-	// call as FutureSocieties.overflowToInfluence(arcologyID)
-	// converts excess progress into influence bonus
+	/** converts excess progress into influence bonus
+	 * call as FutureSocieties.overflowToInfluence(arcologyID)
+	 * @param {number} arcologyID
+	 */
 	function overflowToInfluence(arcologyID) {
 		const arcology = V.arcologies[arcologyID];
 		for (const fs of activeFSes(arcologyID)) {
-			if (arcology[fs] > V.FSLockinLevel) {
-				arcology.influenceBonus += arcology[fs] - V.FSLockinLevel;
-				arcology[fs] = V.FSLockinLevel;
+			if (fs !== "FSNull") { // no conventional progress
+				if (arcology[fs] > V.FSLockinLevel) {
+					arcology.influenceBonus += arcology[fs] - V.FSLockinLevel;
+					arcology[fs] = V.FSLockinLevel;
+				}
+			}
+		}
+	}
+
+	/** returns an array of FSes which the arcology has developed enough to influence others
+	 * call as FutureSocieties.influenceSources(arcologyID)
+	 * @param {number} arcologyID
+	 */
+	function influenceSources(arcologyID) {
+		let fses = [];
+		const arcology = V.arcologies[arcologyID];
+		for (const fs of activeFSes(arcologyID)) {
+			if (fs !== "FSNull") { // no influence from Multiculturalism?
+				if (arcology[fs] > 60) {
+					fses.push(fs);
+				}
+			}
+		}
+		return fses;
+	}
+
+	/** determines whether two named FSes are naturally conflicting or not
+	 * @param {string} left FS
+	 * @param {string} right FS
+	 * @returns {boolean}
+	 */
+	function conflictingFSes(left, right) {
+		if (left !== right) { // identical FSes are not opposed
+			for (const group of FSMutexGroups) {
+				if (group.includesAll(left, right)) {
+					return true; // but any other FS in the mutex group is
+				}
+			}
+		}
+		return false;
+	}
+
+	/** returns the set of shared FSes between two arcologies, and the set of conflicts between pairs of FSes between the arcologies
+	 * relatively expensive, try not to call frequently
+	 * call as FutureSocieties.diplomaticFSes(arc1ID, arc2ID)
+	 * @param {number} arc1ID
+	 * @param {number} arc2ID
+	 * @returns {{shared: string[], conflicting: string[][]}}
+	 */
+	function diplomaticFSes(arc1ID, arc2ID) {
+		let shared = [], conflicting = [];
+		const arc1FSes = activeFSes(arc1ID);
+		const arc2FSes = activeFSes(arc2ID);
+		// find ordinary shared and conflicting FSes
+		for (const fs1 of arc1FSes) {
+			for (const fs2 of arc2FSes) {
+				if (fs1 === fs2) {
+					shared.push(fs1);
+				} else if (conflictingFSes(fs1, fs2)) {
+					conflicting.push([fs1, fs2]);
+				}
+			}
+		}
+		// special cases: racial FSes might be conflicting even when shared
+		const arc1 = V.arcologies[arc1ID];
+		const arc2 = V.arcologies[arc2ID];
+		if (shared.contains("FSSupremacist")) {
+			// a different race is supreme
+			if (arc1.FSSupremacistRace !== arc2.FSSupremacistRace) {
+				shared.delete("FSSupremacist");
+				conflicting.push(["FSSupremacist", "FSSupremacist"]);
+			}
+			// subjugating the supreme race
+			if (arc2FSes.contains("FSSubjugationist") && arc2.FSSubjugationistRace === arc1.FSSupremacistRace) {
+				shared.delete("FSSupremacist");
+				conflicting.push(["FSSupremacist", "FSSubjugationist"]);
+			}
+		}
+		if (shared.contains("FSSubjugationist")) {
+			// subjugating a different race
+			if (arc1.FSSubjugationistRace !== arc2.FSSubjugationistRace) {
+				shared.delete("FSSubjugationist");
+				conflicting.push(["FSSubjugationist", "FSSubjugationist"]);
+			}
+			// believe the subjugated race is supreme
+			if (arc2FSes.contains("FSSupremacist") && arc2.FSSupremacistRace === arc1.FSSubjugationistRace) {
+				shared.delete("FSSubjugationist");
+				conflicting.push(["FSSubjugationist", "FSSupremacist"]);
+			}
+		}
+		return {shared, conflicting};
+	}
+
+	/** returns the future society display name (typically an "ism") for the given property
+	 * @param {string} FSProp
+	 * @returns {string}
+	 */
+	function displayName(FSProp) {
+		return DisplayName[FSProp].noun;
+	}
+
+	/** returns the future society adjective (typically an "ist") for the given property
+	 * @param {string} FSProp
+	 * @returns {string}
+	 */
+	function displayAdj(FSProp) {
+		return DisplayName[FSProp].adj;
+	}
+
+	/** decays all the FSes adopted by a particular arcology (for example, because of government instability)
+	 * call as FutureSocieties.decay(arcologyID)
+	 * @param {number} arcologyID
+	 * @returns {Array<string>} FSes which purged completely
+	 */
+	function decayFSes(arcologyID) {
+		const fses = activeFSes(arcologyID);
+		const arc = V.arcologies[arcologyID];
+		let purged = [];
+		for (const fs of fses) {
+			if (fs !== "FSNull") { // exempt for some reason?
+				if (arc[fs] < jsRandom(10, 150)) {
+					purged.push(fs);
+				} else {
+					arc[fs] -= 10;
+				}
 			}
 		}
+		return purged;
 	}
 
-	// call as FutureSocieties.remove(FS)
-	// FS must be a string (e.g. "FSPaternalist" or "FSDegradationist").
+	/** Remove an FS and all associated attributes from an arcology
+	 * call as FutureSocieties.remove(FS)
+	 * @param {string} FS (e.g. "FSPaternalist" or "FSDegradationist")
+	 */
 	function removeFS(FS) {
 		const arcology = V.arcologies[0];
 		const FSDecoration = `${FS}Decoration`;
diff --git a/src/js/generateMarketSlave.js b/src/js/generateMarketSlave.js
index aa24346754e6ac5c90090e9f7cb56a263ddc9b92..8d025903825d3d9d7f6a741d0f5b6a743464d02b 100644
--- a/src/js/generateMarketSlave.js
+++ b/src/js/generateMarketSlave.js
@@ -470,7 +470,7 @@ globalThis.generateMarketSlave = function(market = "kidnappers", numArcology = 1
 			} else {
 				market = 1;
 			}
-			opinion = arcologyOpinion(V.arcologies[0], V.arcologies[market]);
+			opinion = ArcologyDiplomacy.opinion(0, market);
 			opinion = Math.trunc(opinion/20);
 			opinion = Math.clamp(opinion, -10, 10);
 
diff --git a/src/neighbor/arcologyDiplomacy.js b/src/neighbor/arcologyDiplomacy.js
new file mode 100644
index 0000000000000000000000000000000000000000..9283acf2496456789cd073622f8130437668d837
--- /dev/null
+++ b/src/neighbor/arcologyDiplomacy.js
@@ -0,0 +1,171 @@
+globalThis.ArcologyDiplomacy = (function() {
+	return {
+		opinion: opinion,
+		selectInfluenceTarget: selectInfluenceTarget
+	};
+
+	/** get one arcology's opinion of another
+	 * @param {number} activeID index
+	 * @param {number} targetID index
+	 * @returns {number} opinion
+	 */
+	function opinion(activeID, targetID) {
+		const activeArcology = V.arcologies[activeID];
+		const targetArcology = V.arcologies[targetID];
+		if (typeof activeArcology.FSNull === "undefined") { activeArcology.FSNull = "unset"; }
+		if (typeof targetArcology.FSNull === "undefined") { targetArcology.FSNull = "unset"; }
+
+		let opinion = 0;
+
+		const {shared, conflicting} = FutureSocieties.diplomaticFSes(activeID, targetID);
+
+		for (const fs of shared) {
+			opinion += activeArcology[fs];
+			opinion += targetArcology[fs];
+		}
+
+		for (const [activeFS, targetFS] of conflicting) {
+			opinion -= activeArcology[activeFS];
+			opinion -= targetArcology[targetFS];
+		}
+
+		// unshared but uncontested multiculturalism gets a relationship bonus
+		if (!shared.includes("FSNull") && !conflicting.some((pair) => pair.includes("FSNull"))) {
+			if (activeArcology.FSNull !== "unset") {
+				opinion += activeArcology.FSNull;
+			} else if (targetArcology.FSNull !== "unset") {
+				opinion += targetArcology.FSNull;
+			}
+		}
+
+		return opinion = Number(opinion) || 0;
+	}
+
+	/** set a new influence target for a given arcology
+	 * @param {number} arcID
+	 */
+	function selectInfluenceTarget(arcID) {
+		const notMulticulturalism = (f) => f !== "FSNull"; // multiculturalism can neither influence nor be influenced
+		const influenceSources = FutureSocieties.influenceSources(arcID);
+		const arcology = V.arcologies[arcID];
+		if (influenceSources.length > 0) {
+			let eligibleTargets = [];
+			const obdedient = (arcology.government === "your trustees" || arcology.government === "your agent");
+
+			for (let targetID = 0; targetID < V.arcologies.length; ++targetID) {
+				const target = V.arcologies[targetID];
+				if (arcology.direction !== target.direction) {
+					if (!obdedient || target.direction !== 0) {
+						const {shared, conflicting} = FutureSocieties.diplomaticFSes(arcID, targetID);
+						let count = 0;
+						count += shared.filter(notMulticulturalism).length;
+						count += conflicting.filter((pair) => pair.every(notMulticulturalism)).length;
+						eligibleTargets.push(...Array(count).fill(target.direction));
+					}
+				}
+			}
+
+			if (eligibleTargets.length > 0) {
+				arcology.influenceTarget = eligibleTargets.random();
+			}
+		}
+	}
+})();
+
+globalThis.ArcologyFSPassiveInfluence = class {
+	/** pick up social hints from an arcology's neighbors
+	 * @param {number} arcID
+	 */
+	constructor(arcID) {
+		this._arcID = arcID;
+		/** @type {Map<number, {shared: string[], conflicting: string[][]}>} */
+		this._relationships = new Map();
+		for (let i = 0; i < V.arcologies.length; ++i) {
+			if (i !== arcID) {
+				this._relationships.set(i, FutureSocieties.diplomaticFSes(arcID, i));
+			}
+		}
+
+		const arcology = V.arcologies[this._arcID];
+		this._thresh = 5;
+		if (arcology.direction === 0) {
+			this._thresh -= V.policies.culturalOpenness * 5;
+		}
+		if (arcology.ownership >= 100) {
+			this._thresh += 5;
+		}
+	}
+
+	/** output the neighbors that have passively influenced a particular FS in this arcology
+	 * @param {string} fs
+	 */
+	output(fs) {
+		/** @type {number[]} */
+		let shared = [];
+		/** @type {Map<string, number[]>} */
+		let conflicting = new Map();
+		const arcology = V.arcologies[this._arcID];
+
+		debugger;
+		for (const [i, rel] of this._relationships) {
+			if (rel.shared.some((s) => s === fs)) {
+				if (V.arcologies[i][fs] > arcology[fs] + this._thresh) {
+					shared.push(i);
+				}
+			} else {
+				const conflict = rel.conflicting.find((p) => p[0] === fs);
+				if (conflict) {
+					const conflictFS = conflict[1];
+					if (conflictFS === "FSNull") {
+						continue; // no passive slowing from Multiculturalism
+					}
+					if (V.arcologies[i][conflictFS] > arcology[fs] + this._thresh) {
+						const oldVal = conflicting.get(conflictFS);
+						if (oldVal) {
+							oldVal.push(i);
+						} else {
+							conflicting.set(conflictFS, [i]);
+						}
+					}
+				}
+			}
+		}
+
+		let t = [];
+		// passive growth influence
+		arcology[fs] += shared.length;
+		if (V.showNeighborDetails && shared.length > 0) {
+			t.push(FutureSocieties.displayName(fs));
+			if (fs === "FSSubjugationism") {
+				t.push(`of ${arcology.FSSubjugationistRace} people`);
+			} else if (fs === "FSSupremacy") {
+				t.push(`for ${arcology.FSSupremacistRace} people`);
+			}
+			t.push(`in ${arcology.name} is influenced by`);
+			const sharedNames = shared.map((i) => V.arcologies[i].name + "'s");
+			t.push(sharedNames.reduce((res, ch, i, arr) => res + (i === arr.length - 1 ? ' and ' : ', ') + ch) +
+				` more advanced ${shared.length === 1 ? "society" : "societies"}.`);
+		}
+
+		// passive slowing influence
+		arcology[fs] -= conflicting.size;
+		if (V.showNeighborDetails && conflicting.size > 0) {
+			let actualDisplayName = FutureSocieties.displayName(fs);
+			if (fs === "FSSubjugationism") {
+				actualDisplayName = `${arcology.FSSubjugationistRace} Subjugationism`;
+			} else if (fs === "FSSupremacy") {
+				actualDisplayName = `${arcology.FSSupremacistRace} Supremacy`;
+			}
+			t.push(`Development of ${actualDisplayName} in ${arcology.name} is slowed by contact with`);
+			let conflictOutput = [];
+			for (const [conflictFS, arcs] of conflicting) {
+				const conflictNames = arcs.map((i) => V.arcologies[i].name + "'s");
+				conflictOutput.push(conflictNames.reduce((res, ch, i, arr) => res + (i === arr.length - 1 ? ' and ' : ', ') + ch) +
+					` more advanced ${FutureSocieties.displayAdj(conflictFS)} ${arcs.length === 1 ? "society" : "societies"}`);
+			}
+			t.push(conflictOutput.reduce((res, ch, i, arr) => res + (i === arr.length - 1 ? ' and ' : ', ') + ch) + '.');
+		}
+
+		return t.join(" ");
+	}
+};
diff --git a/src/neighbor/arcologyOpinion.js b/src/neighbor/arcologyOpinion.js
deleted file mode 100644
index 8642f89fc1934c35de09a76deeac9f4c92dce93e..0000000000000000000000000000000000000000
--- a/src/neighbor/arcologyOpinion.js
+++ /dev/null
@@ -1,367 +0,0 @@
-globalThis.arcologyOpinion = function(activeArcology, targetArcology) {
-	if (typeof activeArcology.FSNull === "undefined") { activeArcology.FSNull = "unset"; }
-	if (typeof targetArcology.FSNull === "undefined") { targetArcology.FSNull = "unset"; }
-
-	let opinion = 0;
-
-	if (activeArcology.FSSubjugationist !== "unset") {
-		if (targetArcology.FSSubjugationist !== "unset") {
-			if (targetArcology.FSSubjugationistRace === activeArcology.FSSubjugationistRace) {
-				opinion += activeArcology.FSSubjugationist;
-				opinion += targetArcology.FSSubjugationist;
-			} else {
-				opinion -= activeArcology.FSSubjugationist;
-				opinion -= targetArcology.FSSubjugationist;
-			}
-		} else if (targetArcology.FSSupremacist !== "unset") {
-			if (targetArcology.FSSupremacistRace === activeArcology.FSSubjugationistRace) {
-				opinion -= activeArcology.FSSubjugationist;
-				opinion -= targetArcology.FSSupremacist;
-			}
-		}
-	}
-	if (activeArcology.FSSupremacist !== "unset") {
-		if (targetArcology.FSSupremacist !== "unset") {
-			if (targetArcology.FSSupremacistRace === activeArcology.FSSupremacistRace) {
-				opinion += activeArcology.FSSupremacist;
-				opinion += targetArcology.FSSupremacist;
-			} else {
-				opinion -= activeArcology.FSSupremacist;
-				opinion -= targetArcology.FSSupremacist;
-			}
-		} else if (targetArcology.FSSubjugationist !== "unset") {
-			if (targetArcology.FSSubjugationistRace === activeArcology.FSSupremacistRace) {
-				opinion -= activeArcology.FSSupremacist;
-				opinion -= targetArcology.FSSubjugationist;
-			}
-		}
-	}
-	if (activeArcology.FSRepopulationFocus !== "unset") {
-		if (targetArcology.FSRepopulationFocus !== "unset") {
-			opinion += activeArcology.FSRepopulationFocus;
-			opinion += targetArcology.FSRepopulationFocus;
-		} else if (targetArcology.FSRestart !== "unset") {
-			opinion -= activeArcology.FSRepopulationFocus;
-			opinion -= targetArcology.FSRestart;
-		}
-	} else if (activeArcology.FSRestart !== "unset") {
-		if (targetArcology.FSRestart !== "unset") {
-			opinion += activeArcology.FSRestart;
-			opinion += targetArcology.FSRestart;
-		} else if (targetArcology.FSRepopulationFocus !== "unset") {
-			opinion -= activeArcology.FSRestart;
-			opinion -= targetArcology.FSRepopulationFocus;
-		}
-	}
-	if (activeArcology.FSGenderRadicalist !== "unset") {
-		if (targetArcology.FSGenderRadicalist !== "unset") {
-			opinion += activeArcology.FSGenderRadicalist;
-			opinion += targetArcology.FSGenderRadicalist;
-		} else if (targetArcology.FSGenderFundamentalist !== "unset") {
-			opinion -= activeArcology.FSGenderRadicalist;
-			opinion -= targetArcology.FSGenderFundamentalist;
-		}
-	} else if (activeArcology.FSGenderFundamentalist !== "unset") {
-		if (targetArcology.FSGenderFundamentalist !== "unset") {
-			opinion += activeArcology.FSGenderFundamentalist;
-			opinion += targetArcology.FSGenderFundamentalist;
-		} else if (targetArcology.FSGenderRadicalist !== "unset") {
-			opinion -= activeArcology.FSGenderFundamentalist;
-			opinion -= targetArcology.FSGenderRadicalist;
-		}
-	}
-	if (activeArcology.FSPaternalist !== "unset") {
-		if (targetArcology.FSPaternalist !== "unset") {
-			opinion += activeArcology.FSPaternalist;
-			opinion += targetArcology.FSPaternalist;
-		} else if (targetArcology.FSDegradationist !== "unset") {
-			opinion -= activeArcology.FSPaternalist;
-			opinion -= targetArcology.FSDegradationist;
-		}
-	} else if (activeArcology.FSDegradationist !== "unset") {
-		if (targetArcology.FSDegradationist !== "unset") {
-			opinion += activeArcology.FSDegradationist;
-			opinion += targetArcology.FSDegradationist;
-		} else if (targetArcology.FSPaternalist !== "unset") {
-			opinion -= activeArcology.FSDegradationist;
-			opinion -= targetArcology.FSPaternalist;
-		}
-	}
-	if (activeArcology.FSBodyPurist !== "unset") {
-		if (targetArcology.FSBodyPurist !== "unset") {
-			opinion += activeArcology.FSBodyPurist;
-			opinion += targetArcology.FSBodyPurist;
-		} else if (targetArcology.FSTransformationFetishist !== "unset") {
-			opinion -= activeArcology.FSBodyPurist;
-			opinion -= targetArcology.FSTransformationFetishist;
-		}
-	} else if (activeArcology.FSTransformationFetishist !== "unset") {
-		if (targetArcology.FSTransformationFetishist !== "unset") {
-			opinion += activeArcology.FSTransformationFetishist;
-			opinion += targetArcology.FSTransformationFetishist;
-		} else if (targetArcology.FSBodyPurist !== "unset") {
-			opinion -= activeArcology.FSTransformationFetishist;
-			opinion -= targetArcology.FSBodyPurist;
-		}
-	}
-	if (activeArcology.FSYouthPreferentialist !== "unset") {
-		if (targetArcology.FSYouthPreferentialist !== "unset") {
-			opinion += activeArcology.FSYouthPreferentialist;
-			opinion += targetArcology.FSYouthPreferentialist;
-		} else if (targetArcology.FSMaturityPreferentialist !== "unset") {
-			opinion -= activeArcology.FSYouthPreferentialist;
-			opinion -= targetArcology.FSMaturityPreferentialist;
-		}
-	} else if (activeArcology.FSMaturityPreferentialist !== "unset") {
-		if (targetArcology.FSMaturityPreferentialist !== "unset") {
-			opinion += activeArcology.FSMaturityPreferentialist;
-			opinion += targetArcology.FSMaturityPreferentialist;
-		} else if (targetArcology.FSYouthPreferentialist !== "unset") {
-			opinion -= activeArcology.FSMaturityPreferentialist;
-			opinion -= targetArcology.FSYouthPreferentialist;
-		}
-	}
-	if (activeArcology.FSSlimnessEnthusiast !== "unset") {
-		if (targetArcology.FSSlimnessEnthusiast !== "unset") {
-			opinion += activeArcology.FSSlimnessEnthusiast;
-			opinion += targetArcology.FSSlimnessEnthusiast;
-		} else if (targetArcology.FSAssetExpansionist !== "unset") {
-			opinion -= activeArcology.FSSlimnessEnthusiast;
-			opinion -= targetArcology.FSAssetExpansionist;
-		}
-	} else if (activeArcology.FSAssetExpansionist !== "unset") {
-		if (targetArcology.FSAssetExpansionist !== "unset") {
-			opinion += activeArcology.FSAssetExpansionist;
-			opinion += targetArcology.FSAssetExpansionist;
-		} else if (targetArcology.FSSlimnessEnthusiast !== "unset") {
-			opinion -= activeArcology.FSAssetExpansionist;
-			opinion -= targetArcology.FSSlimnessEnthusiast;
-		}
-	}
-	if (activeArcology.FSPastoralist !== "unset") {
-		if (targetArcology.FSPastoralist !== "unset") {
-			opinion += activeArcology.FSPastoralist;
-			opinion += targetArcology.FSPastoralist;
-		} else if (targetArcology.FSCummunism !== "unset") {
-			opinion -= activeArcology.FSPastoralist;
-			opinion -= targetArcology.FSCummunism;
-		}
-	} else if (activeArcology.FSCummunism !== "unset") {
-		if (targetArcology.FSCummunism !== "unset") {
-			opinion += activeArcology.FSCummunism;
-			opinion += targetArcology.FSCummunism;
-		} else if (targetArcology.FSPastoralist !== "unset") {
-			opinion -= activeArcology.FSCummunism;
-			opinion -= targetArcology.FSPastoralist;
-		}
-	}
-	if (activeArcology.FSPhysicalIdealist !== "unset") {
-		if (targetArcology.FSPhysicalIdealist !== "unset") {
-			opinion += activeArcology.FSPhysicalIdealist;
-			opinion += targetArcology.FSPhysicalIdealist;
-		} else if (targetArcology.FSHedonisticDecadence !== "unset") {
-			opinion -= activeArcology.FSPhysicalIdealist;
-			opinion -= targetArcology.FSHedonisticDecadence;
-		}
-	} else if (activeArcology.FSHedonisticDecadence !== "unset") {
-		if (targetArcology.FSHedonisticDecadence !== "unset") {
-			opinion += activeArcology.FSHedonisticDecadence;
-			opinion += targetArcology.FSHedonisticDecadence;
-		} else if (targetArcology.FSPhysicalIdealist !== "unset") {
-			opinion -= activeArcology.FSHedonisticDecadence;
-			opinion -= targetArcology.FSPhysicalIdealist;
-		}
-	}
-	if (activeArcology.FSIntellectualDependency !== "unset") {
-		if (targetArcology.FSIntellectualDependency !== "unset") {
-			opinion += activeArcology.FSIntellectualDependency;
-			opinion += targetArcology.FSIntellectualDependency;
-		} else if (targetArcology.FSSlaveProfessionalism !== "unset") {
-			opinion -= activeArcology.FSIntellectualDependency;
-			opinion -= targetArcology.FSSlaveProfessionalism;
-		}
-	} else if (activeArcology.FSSlaveProfessionalism !== "unset") {
-		if (targetArcology.FSSlaveProfessionalism !== "unset") {
-			opinion += activeArcology.FSSlaveProfessionalism;
-			opinion += targetArcology.FSSlaveProfessionalism;
-		} else if (targetArcology.FSIntellectualDependency !== "unset") {
-			opinion -= activeArcology.FSSlaveProfessionalism;
-			opinion -= targetArcology.FSIntellectualDependency;
-		}
-	}
-	if (activeArcology.FSPetiteAdmiration !== "unset") {
-		if (targetArcology.FSPetiteAdmiration !== "unset") {
-			opinion += activeArcology.FSPetiteAdmiration;
-			opinion += targetArcology.FSPetiteAdmiration;
-		} else if (targetArcology.FSStatuesqueGlorification !== "unset") {
-			opinion -= activeArcology.FSPetiteAdmiration;
-			opinion -= targetArcology.FSStatuesqueGlorification;
-		}
-	} else if (activeArcology.FSStatuesqueGlorification !== "unset") {
-		if (targetArcology.FSStatuesqueGlorification !== "unset") {
-			opinion += activeArcology.FSStatuesqueGlorification;
-			opinion += targetArcology.FSStatuesqueGlorification;
-		} else if (targetArcology.FSPetiteAdmiration !== "unset") {
-			opinion -= activeArcology.FSStatuesqueGlorification;
-			opinion -= targetArcology.FSPetiteAdmiration;
-		}
-	}
-	if (activeArcology.FSChattelReligionist !== "unset") {
-		if (targetArcology.FSChattelReligionist !== "unset") {
-			opinion += activeArcology.FSChattelReligionist;
-			opinion += targetArcology.FSChattelReligionist;
-		} else if (targetArcology.FSNull !== "unset") {
-			opinion -= activeArcology.FSChattelReligionist;
-			opinion -= targetArcology.FSNull;
-		}
-	} else if (activeArcology.FSNull !== "unset") {
-		if (targetArcology.FSNull !== "unset") {
-			opinion += activeArcology.FSNull;
-			opinion += targetArcology.FSNull;
-		} else if (targetArcology.FSChattelReligionist !== "unset") {
-			opinion -= activeArcology.FSNull;
-			opinion -= targetArcology.FSChattelReligionist;
-		} else {
-			opinion += activeArcology.FSNull;
-		}
-	} else if (targetArcology.FSNull !== "unset") {
-		opinion += targetArcology.FSNull;
-	}
-	if (activeArcology.FSRomanRevivalist !== "unset") {
-		if (targetArcology.FSRomanRevivalist !== "unset") {
-			opinion += activeArcology.FSRomanRevivalist;
-			opinion += targetArcology.FSRomanRevivalist;
-		} else if (targetArcology.FSAztecRevivalist !== "unset") {
-			opinion -= activeArcology.FSRomanRevivalist;
-			opinion -= targetArcology.FSAztecRevivalist;
-		} else if (targetArcology.FSEgyptianRevivalist !== "unset") {
-			opinion -= activeArcology.FSRomanRevivalist;
-			opinion -= targetArcology.FSEgyptianRevivalist;
-		} else if (targetArcology.FSEdoRevivalist !== "unset") {
-			opinion -= activeArcology.FSRomanRevivalist;
-			opinion -= targetArcology.FSEdoRevivalist;
-		} else if (targetArcology.FSArabianRevivalist !== "unset") {
-			opinion -= activeArcology.FSRomanRevivalist;
-			opinion -= targetArcology.FSArabianRevivalist;
-		} else if (targetArcology.FSChineseRevivalist !== "unset") {
-			opinion -= activeArcology.FSRomanRevivalist;
-			opinion -= targetArcology.FSChineseRevivalist;
-		}
-	} else if (activeArcology.FSAztecRevivalist !== "unset") {
-		if (targetArcology.FSAztecRevivalist !== "unset") {
-			opinion += activeArcology.FSAztecRevivalist;
-			opinion += targetArcology.FSAztecRevivalist;
-		} else if (targetArcology.FSRomanRevivalist !== "unset") {
-			opinion -= activeArcology.FSAztecRevivalist;
-			opinion -= targetArcology.FSRomanRevivalist;
-		} else if (targetArcology.FSEgyptianRevivalist !== "unset") {
-			opinion -= activeArcology.FSAztecRevivalist;
-			opinion -= targetArcology.FSEgyptianRevivalist;
-		} else if (targetArcology.FSEdoRevivalist !== "unset") {
-			opinion -= activeArcology.FSAztecRevivalist;
-			opinion -= targetArcology.FSEdoRevivalist;
-		} else if (targetArcology.FSArabianRevivalist !== "unset") {
-			opinion -= activeArcology.FSAztecRevivalist;
-			opinion -= targetArcology.FSArabianRevivalist;
-		} else if (targetArcology.FSChineseRevivalist !== "unset") {
-			opinion -= activeArcology.FSAztecRevivalist;
-			opinion -= targetArcology.FSChineseRevivalist;
-		}
-	} else if (activeArcology.FSEgyptianRevivalist !== "unset") {
-		if (targetArcology.FSEgyptianRevivalist !== "unset") {
-			opinion += activeArcology.FSEgyptianRevivalist;
-			opinion += targetArcology.FSEgyptianRevivalist;
-		} else if (targetArcology.FSRomanRevivalist !== "unset") {
-			opinion -= activeArcology.FSEgyptianRevivalist;
-			opinion -= targetArcology.FSRomanRevivalist;
-		} else if (targetArcology.FSAztecRevivalist !== "unset") {
-			opinion -= activeArcology.FSEgyptianRevivalist;
-			opinion -= targetArcology.FSAztecRevivalist;
-		} else if (targetArcology.FSEdoRevivalist !== "unset") {
-			opinion -= activeArcology.FSEgyptianRevivalist;
-			opinion -= targetArcology.FSEdoRevivalist;
-		} else if (targetArcology.FSArabianRevivalist !== "unset") {
-			opinion -= activeArcology.FSEgyptianRevivalist;
-			opinion -= targetArcology.FSArabianRevivalist;
-		} else if (targetArcology.FSChineseRevivalist !== "unset") {
-			opinion -= activeArcology.FSEgyptianRevivalist;
-			opinion -= targetArcology.FSChineseRevivalist;
-		}
-		if (targetArcology.FSIncestFetishist !== "unset") {
-			opinion += activeArcology.FSEgyptianRevivalist;
-			opinion += targetArcology.FSIncestFetishist;
-		}
-	} else if (activeArcology.FSEdoRevivalist !== "unset") {
-		if (targetArcology.FSEdoRevivalist !== "unset") {
-			opinion += activeArcology.FSEdoRevivalist;
-			opinion += targetArcology.FSEdoRevivalist;
-		} else if (targetArcology.FSEgyptianRevivalist !== "unset") {
-			opinion -= activeArcology.FSEdoRevivalist;
-			opinion -= targetArcology.FSEgyptianRevivalist;
-		} else if (targetArcology.FSRomanRevivalist !== "unset") {
-			opinion -= activeArcology.FSEdoRevivalist;
-			opinion -= targetArcology.FSRomanRevivalist;
-		} else if (targetArcology.FSAztecRevivalist !== "unset") {
-			opinion -= activeArcology.FSEdoRevivalist;
-			opinion -= targetArcology.FSAztecRevivalist;
-		} else if (targetArcology.FSArabianRevivalist !== "unset") {
-			opinion -= activeArcology.FSEdoRevivalist;
-			opinion -= targetArcology.FSArabianRevivalist;
-		} else if (targetArcology.FSChineseRevivalist !== "unset") {
-			opinion -= activeArcology.FSEdoRevivalist;
-			opinion -= targetArcology.FSChineseRevivalist;
-		}
-	} else if (activeArcology.FSArabianRevivalist !== "unset") {
-		if (targetArcology.FSArabianRevivalist !== "unset") {
-			opinion += activeArcology.FSArabianRevivalist;
-			opinion += targetArcology.FSArabianRevivalist;
-		} else if (targetArcology.FSEgyptianRevivalist !== "unset") {
-			opinion -= activeArcology.FSArabianRevivalist;
-			opinion -= targetArcology.FSEgyptianRevivalist;
-		} else if (targetArcology.FSEdoRevivalist !== "unset") {
-			opinion -= activeArcology.FSArabianRevivalist;
-			opinion -= targetArcology.FSEdoRevivalist;
-		} else if (targetArcology.FSRomanRevivalist !== "unset") {
-			opinion -= activeArcology.FSArabianRevivalist;
-			opinion -= targetArcology.FSRomanRevivalist;
-		} else if (targetArcology.FSAztecRevivalist !== "unset") {
-			opinion -= activeArcology.FSArabianRevivalist;
-			opinion -= targetArcology.FSAztecRevivalist;
-		} else if (targetArcology.FSChineseRevivalist !== "unset") {
-			opinion -= activeArcology.FSArabianRevivalist;
-			opinion -= targetArcology.FSChineseRevivalist;
-		}
-	} else if (activeArcology.FSChineseRevivalist !== "unset") {
-		if (targetArcology.FSChineseRevivalist !== "unset") {
-			opinion += activeArcology.FSChineseRevivalist;
-			opinion += targetArcology.FSChineseRevivalist;
-		} else if (targetArcology.FSEgyptianRevivalist !== "unset") {
-			opinion -= activeArcology.FSChineseRevivalist;
-			opinion -= targetArcology.FSEgyptianRevivalist;
-		} else if (targetArcology.FSEdoRevivalist !== "unset") {
-			opinion -= activeArcology.FSChineseRevivalist;
-			opinion -= targetArcology.FSEdoRevivalist;
-		} else if (targetArcology.FSArabianRevivalist !== "unset") {
-			opinion -= activeArcology.FSChineseRevivalist;
-			opinion -= targetArcology.FSArabianRevivalist;
-		} else if (targetArcology.FSRomanRevivalist !== "unset") {
-			opinion -= activeArcology.FSChineseRevivalist;
-			opinion -= targetArcology.FSRomanRevivalist;
-		} else if (targetArcology.FSAztecRevivalist !== "unset") {
-			opinion -= activeArcology.FSChineseRevivalist;
-			opinion -= targetArcology.FSAztecRevivalist;
-		}
-	}
-	if (activeArcology.FSIncestFetishist !== "unset") {
-		if (targetArcology.FSIncestFetishist !== "unset") {
-			opinion += activeArcology.FSIncestFetishist;
-			opinion += targetArcology.FSIncestFetishist;
-		}
-		if (targetArcology.FSEgyptianRevivalist !== "unset") {
-			opinion += activeArcology.FSIncestFetishist;
-			opinion += targetArcology.FSEgyptianRevivalist;
-		}
-	}
-
-	return opinion = Number(opinion) || 0;
-};
diff --git a/src/uncategorized/arcmgmt.tw b/src/uncategorized/arcmgmt.tw
index ae50850d999abf599b084c424a500c6c11b3e435..95d9db643b04013c722a4955dc2aa24065daf650 100644
--- a/src/uncategorized/arcmgmt.tw
+++ b/src/uncategorized/arcmgmt.tw
@@ -1501,7 +1501,7 @@ You own
 	<<set _desc = []>>
 	<<set _descNeg = []>>
 	<<for $i = 1; $i < $arcologies.length; $i++>>
-		<<set _opinion = arcologyOpinion($arcologies[0], $arcologies[$i])>>
+		<<set _opinion = ArcologyDiplomacy.opinion(0, $i)>>
 		<<if _opinion >= 100>>
 			<<set _desc.push($arcologies[$i].name)>>
 		<<elseif _opinion <= -100>>
diff --git a/src/uncategorized/bulkSlaveGenerate.tw b/src/uncategorized/bulkSlaveGenerate.tw
index 9945317d0bb59463708c82a203457e991970896b..c7f3d0b90a52cf310d757cab9f145ddec3263cb2 100644
--- a/src/uncategorized/bulkSlaveGenerate.tw
+++ b/src/uncategorized/bulkSlaveGenerate.tw
@@ -65,9 +65,8 @@
 	<<if $numArcology >= $arcologies.length>>
 		<<set $numArcology = 1>>
 	<</if>>
-	<<set _opinion = arcologyOpinion($arcologies[0], $arcologies[$numArcology])>>
-	<<set _opinion = Math.trunc(_opinion/20)>>
-	<<set _opinion = Math.clamp(_opinion, -10, 10)>>
+	<<set _opinion = ArcologyDiplomacy.opinion(0, $numArcology)>>
+	<<set _opinion = Math.clamp(Math.trunc(_opinion/20), -10, 10)>>
 	<<set $discount -= (_opinion * 25)>>
 
 <</switch>>
diff --git a/src/uncategorized/neighborInteract.tw b/src/uncategorized/neighborInteract.tw
index 8a569b64a584f3e398d6589fa7fc8c3ceefe361c..97c8bba3c3bfdc2a219b6b7d6a0cc76d4eb46a7f 100644
--- a/src/uncategorized/neighborInteract.tw
+++ b/src/uncategorized/neighborInteract.tw
@@ -402,7 +402,7 @@ You have <<print $arcologies.length-1>> neighbors. <br><br>
 	<<elseif $arcologies[_currentNeighbor].direction === $arcologies[0].embargoTarget>>
 		Due to your active embargo, trade with $arcologies[_currentNeighbor].name is not possible.
 	<<else>>
-		<<set _opinion = arcologyOpinion($arcologies[_currentNeighbor], $arcologies[0])>>
+		<<set _opinion = ArcologyDiplomacy.opinion(_currentNeighbor, 0)>>
 		<<set _prices = _opinion*10>>
 	<</if>>
 	<<if $arcologies[_currentNeighbor].FSRomanRevivalist > 95>>
diff --git a/src/uncategorized/neighborsDevelopment.tw b/src/uncategorized/neighborsDevelopment.tw
index 404defb1f6fd9f15185c8fcc7bddc822bb02bb83..266655e7b0318633d9df4b046d44f3e34125f816 100644
--- a/src/uncategorized/neighborsDevelopment.tw
+++ b/src/uncategorized/neighborsDevelopment.tw
@@ -177,246 +177,13 @@ has an estimated GSP of @@.yellowgreen;<<print cashFormat(_prosperity)>><<if $sh
 			Its direct democracy votes to empower some elected officials in the hope they can lead the arcology out of its problems.
 			<<set $arcologies[$i].government = "elected officials">>
 		<</switch>>
-		<<set $desc = []>>
-		<<if $arcologies[$i].FSSubjugationist != "unset">>
-			<<if $arcologies[$i].FSSubjugationist < random(10,150)>>
-				<<set $desc.push("Racial Subjugationism")>>
-				<<set $arcologies[$i].FSSubjugationist = "unset">>
-			<<else>>
-				<<set $arcologies[$i].FSSubjugationist -= 10>>
-			<</if>>
-		<</if>>
-		<<if $arcologies[$i].FSSupremacist != "unset">>
-			<<if $arcologies[$i].FSSupremacist < random(10,150)>>
-				<<set $desc.push("Racial Supremacy")>>
-				<<set $arcologies[$i].FSSupremacist = "unset">>
-			<<else>>
-				<<set $arcologies[$i].FSSupremacist -= 10>>
-			<</if>>
-		<</if>>
-		<<if $arcologies[$i].FSRepopulationFocus != "unset">>
-			<<if $arcologies[$i].FSRepopulationFocus < random(10,150)>>
-				<<set $desc.push("Repopulation Focus")>>
-				<<set $arcologies[$i].FSRepopulationFocus = "unset">>
-			<<else>>
-				<<set $arcologies[$i].FSRepopulationFocus -= 10>>
-			<</if>>
-		<<elseif $arcologies[$i].FSRestart != "unset">>
-			<<if $arcologies[$i].FSRestart < random(10,150)>>
-				<<set $desc.push("Eugenics")>>
-				<<set $arcologies[$i].FSRestart = "unset">>
-			<<else>>
-				<<set $arcologies[$i].FSRestart -= 10>>
-			<</if>>
-		<</if>>
-		<<if $arcologies[$i].FSGenderRadicalist != "unset">>
-			<<if $arcologies[$i].FSGenderRadicalist < random(10,150)>>
-				<<set $desc.push("Gender Radicalism")>>
-				<<set $arcologies[$i].FSGenderRadicalist = "unset">>
-			<<else>>
-				<<set $arcologies[$i].FSGenderRadicalist -= 10>>
-			<</if>>
-		<<elseif $arcologies[$i].FSGenderFundamentalist != "unset">>
-			<<if $arcologies[$i].FSGenderFundamentalist < random(10,150)>>
-				<<set $desc.push("Gender Fundamentalism")>>
-				<<set $arcologies[$i].FSGenderFundamentalist = "unset">>
-			<<else>>
-				<<set $arcologies[$i].FSGenderFundamentalist -= 10>>
-			<</if>>
-		<</if>>
-		<<if $arcologies[$i].FSPaternalist != "unset">>
-			<<if $arcologies[$i].FSPaternalist < random(10,150)>>
-				<<set $desc.push("Paternalism")>>
-				<<set $arcologies[$i].FSPaternalist = "unset">>
-			<<else>>
-				<<set $arcologies[$i].FSPaternalist -= 10>>
-			<</if>>
-		<<elseif $arcologies[$i].FSDegradationist != "unset">>
-			<<if $arcologies[$i].FSDegradationist < random(10,150)>>
-				<<set $desc.push("Degradationism")>>
-				<<set $arcologies[$i].FSDegradationist = "unset">>
-			<<else>>
-				<<set $arcologies[$i].FSDegradationist -= 10>>
-			<</if>>
-		<</if>>
-		<<if $arcologies[$i].FSIntellectualDependency != "unset">>
-			<<if $arcologies[$i].FSIntellectualDependency < random(10,150)>>
-				<<set $desc.push("Intellectual Dependency")>>
-				<<set $arcologies[$i].FSIntellectualDependency = "unset">>
-			<<else>>
-				<<set $arcologies[$i].FSIntellectualDependency -= 10>>
-			<</if>>
-		<<elseif $arcologies[$i].FSSlaveProfessionalism != "unset">>
-			<<if $arcologies[$i].FSSlaveProfessionalism < random(10,150)>>
-				<<set $desc.push("Slave Professionalism")>>
-				<<set $arcologies[$i].FSSlaveProfessionalism = "unset">>
-			<<else>>
-				<<set $arcologies[$i].FSSlaveProfessionalism -= 10>>
-			<</if>>
-		<</if>>
-		<<if $arcologies[$i].FSBodyPurist != "unset">>
-			<<if $arcologies[$i].FSBodyPurist < random(10,150)>>
-				<<set $desc.push("Body Purism")>>
-				<<set $arcologies[$i].FSBodyPurist = "unset">>
-			<<else>>
-				<<set $arcologies[$i].FSBodyPurist -= 10>>
-			<</if>>
-		<<elseif $arcologies[$i].FSTransformationFetishist != "unset">>
-			<<if $arcologies[$i].FSTransformationFetishist < random(10,150)>>
-				<<set $desc.push("Transformation Fetishism")>>
-				<<set $arcologies[$i].FSTransformationFetishist = "unset">>
-			<<else>>
-				<<set $arcologies[$i].FSTransformationFetishist -= 10>>
-			<</if>>
-		<</if>>
-		<<if $arcologies[$i].FSYouthPreferentialist != "unset">>
-			<<if $arcologies[$i].FSYouthPreferentialist < random(10,150)>>
-				<<set $desc.push("Youth Preferentialism")>>
-				<<set $arcologies[$i].FSYouthPreferentialist = "unset">>
-			<<else>>
-				<<set $arcologies[$i].FSYouthPreferentialist -= 10>>
-			<</if>>
-		<<elseif $arcologies[$i].FSMaturityPreferentialist != "unset">>
-			<<if $arcologies[$i].FSMaturityPreferentialist < random(10,150)>>
-				<<set $desc.push("Maturity Preferentialism")>>
-				<<set $arcologies[$i].FSMaturityPreferentialist = "unset">>
-			<<else>>
-				<<set $arcologies[$i].FSMaturityPreferentialist -= 10>>
-			<</if>>
-		<</if>>
-		<<if $arcologies[$i].FSPetiteAdmiration != "unset">>
-			<<if $arcologies[$i].FSPetiteAdmiration < random(10,150)>>
-				<<set $desc.push("Petite Admiration")>>
-				<<set $arcologies[$i].FSPetiteAdmiration = "unset">>
-			<<else>>
-				<<set $arcologies[$i].FSPetiteAdmiration -= 10>>
-			<</if>>
-		<<elseif $arcologies[$i].FSStatuesqueGlorification != "unset">>
-			<<if $arcologies[$i].FSStatuesqueGlorification < random(10,150)>>
-				<<set $desc.push("Statuesque Glorification")>>
-				<<set $arcologies[$i].FSStatuesqueGlorification = "unset">>
-			<<else>>
-				<<set $arcologies[$i].FSStatuesqueGlorification -= 10>>
-			<</if>>
-		<</if>>
-		<<if $arcologies[$i].FSSlimnessEnthusiast != "unset">>
-			<<if $arcologies[$i].FSSlimnessEnthusiast < random(10,150)>>
-				<<set $desc.push("Slimness Enthusiasm")>>
-				<<set $arcologies[$i].FSSlimnessEnthusiast = "unset">>
-			<<else>>
-				<<set $arcologies[$i].FSSlimnessEnthusiast -= 10>>
-			<</if>>
-		<<elseif $arcologies[$i].FSAssetExpansionist != "unset">>
-			<<if $arcologies[$i].FSAssetExpansionist < random(10,150)>>
-				<<set $desc.push("Asset Expansionism")>>
-				<<set $arcologies[$i].FSAssetExpansionist = "unset">>
-			<<else>>
-				<<set $arcologies[$i].FSAssetExpansionist -= 10>>
-			<</if>>
-		<</if>>
-		<<if $arcologies[$i].FSPastoralist != "unset">>
-			<<if $arcologies[$i].FSPastoralist < random(10,150)>>
-				<<set $desc.push("Pastoralism")>>
-				<<set $arcologies[$i].FSPastoralist = "unset">>
-			<<else>>
-				<<set $arcologies[$i].FSPastoralist -= 10>>
-			<</if>>
-		<<elseif $arcologies[$i].FSCummunism != "unset">>
-			<<if $arcologies[$i].FSCummunism < random(10,150)>>
-				<<set $desc.push("Cummunism")>>
-				<<set $arcologies[$i].FSCummunism = "unset">>
-			<<else>>
-				<<set $arcologies[$i].FSCummunism -= 10>>
-			<</if>>
-		<</if>>
-		<<if $arcologies[$i].FSPhysicalIdealist != "unset">>
-			<<if $arcologies[$i].FSPhysicalIdealist < random(10,150)>>
-				<<set $desc.push("Physical Idealism")>>
-				<<set $arcologies[$i].FSPhysicalIdealist = "unset">>
-			<<else>>
-				<<set $arcologies[$i].FSPhysicalIdealist -= 10>>
-			<</if>>
-		<<elseif $arcologies[$i].FSHedonisticDecadence != "unset">>
-			<<if $arcologies[$i].FSHedonisticDecadence < random(10,150)>>
-				<<set $desc.push("Decadent Hedonism")>>
-				<<set $arcologies[$i].FSHedonisticDecadence = "unset">>
-			<<else>>
-				<<set $arcologies[$i].FSHedonisticDecadence -= 10>>
-			<</if>>
-		<</if>>
-		<<if $arcologies[$i].FSIncestFetishist != "unset">>
-			<<if $arcologies[$i].FSIncestFetishist < random(10,150)>>
-				<<set $desc.push("Incest Fetishism")>>
-				<<set $arcologies[$i].FSIncestFetishist = "unset">>
-			<<else>>
-				<<set $arcologies[$i].FSIncestFetishist -= 10>>
-			<</if>>
-		<</if>>
-		<<if $arcologies[$i].FSChattelReligionist != "unset">>
-			<<if $arcologies[$i].FSChattelReligionist < random(10,150)>>
-				<<set $desc.push("Chattel Religionism")>>
-				<<set $arcologies[$i].FSChattelReligionist = "unset">>
-			<<else>>
-				<<set $arcologies[$i].FSChattelReligionist -= 10>>
-			<</if>>
-		<</if>>
-		<<if $arcologies[$i].FSRomanRevivalist != "unset">>
-			<<if $arcologies[$i].FSRomanRevivalist < random(10,150)>>
-				<<set $desc.push("Roman Revivalism")>>
-				<<set $arcologies[$i].FSRomanRevivalist = "unset">>
-			<<else>>
-				<<set $arcologies[$i].FSRomanRevivalist -= 10>>
-			<</if>>
-		<<elseif $arcologies[$i].FSAztecRevivalist != "unset">>
-			<<if $arcologies[$i].FSAztecRevivalist < random(10,150)>>
-				<<set $desc.push("Aztec Revivalism")>>
-				<<set $arcologies[$i].FSAztecRevivalist = "unset">>
-			<<else>>
-				<<set $arcologies[$i].FSAztecRevivalist -= 10>>
-			<</if>>
-		<<elseif $arcologies[$i].FSEgyptianRevivalist != "unset">>
-			<<if $arcologies[$i].FSEgyptianRevivalist < random(10,150)>>
-				<<set $desc.push("Egyptian Revivalism")>>
-				<<set $arcologies[$i].FSEgyptianRevivalist = "unset">>
-			<<else>>
-				<<set $arcologies[$i].FSEgyptianRevivalist -= 10>>
-			<</if>>
-		<<elseif $arcologies[$i].FSEdoRevivalist != "unset">>
-			<<if $arcologies[$i].FSEdoRevivalist < random(10,150)>>
-				<<set $desc.push("Edo Revivalism")>>
-				<<set $arcologies[$i].FSEdoRevivalist = "unset">>
-			<<else>>
-				<<set $arcologies[$i].FSEdoRevivalist -= 10>>
-			<</if>>
-		<<elseif $arcologies[$i].FSArabianRevivalist != "unset">>
-			<<if $arcologies[$i].FSArabianRevivalist < random(10,150)>>
-				<<set $desc.push("Arabian Revivalism")>>
-				<<set $arcologies[$i].FSArabianRevivalist = "unset">>
-			<<else>>
-				<<set $arcologies[$i].FSArabianRevivalist -= 10>>
-			<</if>>
-		<<elseif $arcologies[$i].FSChineseRevivalist != "unset">>
-			<<if $arcologies[$i].FSChineseRevivalist < random(10,150)>>
-				<<set $desc.push("Chinese Revivalism")>>
-				<<set $arcologies[$i].FSChineseRevivalist = "unset">>
-			<<else>>
-				<<set $arcologies[$i].FSChineseRevivalist -= 10>>
-			<</if>>
-		<</if>>
-		<<if $desc.length == 0>>
-		<<elseif $desc.length > 2>>
-			Its citizens take the opportunity to make radical social changes, @@.cyan;purging the $desc[0],
-			<<for _k = 1; _k < $desc.length; _k++>>
-				<<if _k < $desc.length-1>>
-					$desc[_k],
-				<<else>>
-					and $desc[_k]@@ favored by the old government.
-				<</if>>
-			<</for>>
-		<<elseif $desc.length == 2>>
-			Its citizens take the opportunity to make social changes, @@.cyan;discarding the $desc[0] and $desc[1]@@ favored by the old government.
-		<<else>>
-			Its citizens take the opportunity to make social change and @@.cyan;abandon the $desc[0]@@ favored by the old government.
+		<<set _desc = FutureSocieties.decay($i).map((fs) => FutureSocieties.displayName(fs))>>
+		<<if _desc.length > 2>>
+			Its citizens take the opportunity to make radical social changes, @@.cyan;purging the <<= _desc.reduce((res, ch, i, arr) => res + (i === arr.length - 1 ? ' and ' : ', ') + ch)>>@@ favored by the old government.
+		<<elseif _desc.length == 2>>
+			Its citizens take the opportunity to make social changes, @@.cyan;discarding the _desc[0] and _desc[1]@@ favored by the old government.
+		<<elseif _desc.length == 1>>
+			Its citizens take the opportunity to make social change and @@.cyan;abandon the _desc[0]@@ favored by the old government.
 		<</if>>
 	<<else>>
 		The arcology is paralyzed by internal dissension over how to respond.
@@ -656,29 +423,12 @@ has an estimated GSP of @@.yellowgreen;<<print cashFormat(_prosperity)>><<if $sh
 	<<set _efficiency += random(0,2)>>
 <</if>>
 
-<<set _FSCrossThresh = 5>>
-<<if $arcologies[$i].direction == 0>>
-	<<set _FSCrossThresh -= $policies.culturalOpenness*5>>
-<</if>>
-<<if $arcologies[$i].ownership >= 100>>
-	<<set _FSCrossThresh += 5>>
-<</if>>
-
 <<if $arcologies[$i].direction != 0>>
 	<<run FutureSocieties.applyBroadProgress($i, _efficiency)>>
 <</if>>
+<<set _passive = new ArcologyFSPassiveInfluence($i)>>
 <<if $arcologies[$i].FSSupremacist != "unset">>
-	<<for $j = 0; $j < $arcologies.length; $j++>>
-		<<if $arcologies[$i].direction != $arcologies[$j].direction>>
-			<<if ($arcologies[$j].FSSupremacist > $arcologies[$i].FSSupremacist + _FSCrossThresh) && ($arcologies[$j].FSSupremacistRace == $arcologies[$i].FSSupremacistRace)>>
-				<<if $showNeighborDetails != 0>>Racial Supremacy for $arcologies[$i].FSSupremacistRace people in $arcologies[$i].name is influenced by $arcologies[$j].name's more advanced society.<</if>>
-				<<set $arcologies[$i].FSSupremacist += 1>>
-			<<elseif ($arcologies[$j].FSSubjugationist > $arcologies[$i].FSSupremacist + _FSCrossThresh) && ($arcologies[$j].FSSubjugationist == $arcologies[$i].FSSupremacistRace)>>
-				<<if $showNeighborDetails != 0>>Development of $arcologies[$i].FSSupremacistRace Supremacy in $arcologies[$i].name is slowed by contact with $arcologies[$j].name's more advanced Subjugationist society.<</if>>
-				<<set $arcologies[$i].FSSupremacist -= 1>>
-			<</if>>
-		<</if>>
-	<</for>>
+	<<= _passive.output("FSSupremacist")>>
 	<<if $arcologies[$i].direction != 0>>
 		<<if $arcologies[$i].FSSupremacist >= $FSLockinLevel>>
 			<<if ($arcologies[$i].name.indexOf("Arcology") != -1) && (random(0,2) == 0)>>
@@ -728,17 +478,7 @@ has an estimated GSP of @@.yellowgreen;<<print cashFormat(_prosperity)>><<if $sh
 <</if>>
 
 <<if $arcologies[$i].FSSubjugationist != "unset">>
-	<<for $j = 0; $j < $arcologies.length; $j++>>
-		<<if $arcologies[$i].direction != $arcologies[$j].direction>>
-			<<if ($arcologies[$j].FSSubjugationist > $arcologies[$i].FSSubjugationist + _FSCrossThresh) && ($arcologies[$j].FSSubjugationistRace == $arcologies[$i].FSSubjugationistRace)>>
-				<<if $showNeighborDetails != 0>>Racial Subjugationism of $arcologies[$i].FSSubjugationistRace people in $arcologies[$i].name is influenced by $arcologies[$j].name's more advanced society.<</if>>
-				<<set $arcologies[$i].FSSubjugationist += 1>>
-			<<elseif ($arcologies[$j].FSSupremacist > $arcologies[$i].FSSubjugationist + _FSCrossThresh) && ($arcologies[$j].FSSupremacist == $arcologies[$i].FSSubjugationistRace)>>
-				<<if $showNeighborDetails != 0>>Development of $arcologies[$i].FSSubjugationistRace Supremacy in $arcologies[$i].name is slowed by contact with $arcologies[$j].name's more advanced Supremacist society.<</if>>
-				<<set $arcologies[$i].FSSubjugationist -= 1>>
-			<</if>>
-		<</if>>
-	<</for>>
+	<<= _passive.output("FSSubjugationist")>>
 	<<if $arcologies[$i].direction != 0>>
 		<<if $arcologies[$i].FSSubjugationist >= $FSLockinLevel>>
 			<<if ($arcologies[$i].name.indexOf("Arcology") != -1) && (random(0,2) == 0)>>
@@ -788,17 +528,7 @@ has an estimated GSP of @@.yellowgreen;<<print cashFormat(_prosperity)>><<if $sh
 <</if>>
 
 <<if $arcologies[$i].FSRepopulationFocus != "unset">>
-	<<for $j = 0; $j < $arcologies.length; $j++>>
-		<<if $arcologies[$i].direction != $arcologies[$j].direction>>
-			<<if $arcologies[$j].FSRepopulationFocus > $arcologies[$i].FSRepopulationFocus + _FSCrossThresh>>
-				<<if $showNeighborDetails != 0>>Repopulationism in $arcologies[$i].name is influenced by $arcologies[$j].name's more advanced society.<</if>>
-				<<set $arcologies[$i].FSRepopulationFocus += 1>>
-			<<elseif $arcologies[$j].FSRestart > $arcologies[$i].FSRepopulationFocus + _FSCrossThresh>>
-				<<if $showNeighborDetails != 0>>Development of Repopulationism in $arcologies[$i].name is slowed by contact with $arcologies[$j].name's more advanced Eugenics society.<</if>>
-				<<set $arcologies[$i].FSRepopulationFocus -= 1>>
-			<</if>>
-		<</if>>
-	<</for>>
+	<<= _passive.output("FSRepopulationFocus")>>
 	<<if $arcologies[$i].direction != 0>>
 		<<if $arcologies[$i].FSRepopulationFocus >= $FSLockinLevel>>
 			<<if ($arcologies[$i].name.indexOf("Arcology") != -1) && (random(0,2) == 0)>>
@@ -829,17 +559,7 @@ has an estimated GSP of @@.yellowgreen;<<print cashFormat(_prosperity)>><<if $sh
 		<</if>>
 	<</if>>
 <<elseif $arcologies[$i].FSRestart != "unset">>
-	<<for $j = 0; $j < $arcologies.length; $j++>>
-		<<if $arcologies[$i].direction != $arcologies[$j].direction>>
-			<<if $arcologies[$j].FSRestart > $arcologies[$i].FSRestart + _FSCrossThresh>>
-				<<if $showNeighborDetails != 0>>Eugenics in $arcologies[$i].name is influenced by $arcologies[$j].name's more advanced society.<</if>>
-				<<set $arcologies[$i].FSRestart += 1>>
-			<<elseif $arcologies[$j].FSRepopulationFocus > $arcologies[$i].FSRestart + _FSCrossThresh>>
-				<<if $showNeighborDetails != 0>>Development of Eugenics in $arcologies[$i].name is slowed by contact with $arcologies[$j].name's more advanced Repopulationist society.<</if>>
-				<<set $arcologies[$i].FSRestart -= 1>>
-			<</if>>
-		<</if>>
-	<</for>>
+	<<= _passive.output("FSRestart")>>
 	<<if $arcologies[$i].direction != 0>>
 		<<if $arcologies[$i].FSRestart >= $FSLockinLevel>>
 			<<if ($arcologies[$i].name.indexOf("Arcology") != -1) && (random(0,2) == 0)>>
@@ -873,17 +593,7 @@ has an estimated GSP of @@.yellowgreen;<<print cashFormat(_prosperity)>><<if $sh
 <</if>>
 
 <<if $arcologies[$i].FSGenderRadicalist != "unset">>
-	<<for $j = 0; $j < $arcologies.length; $j++>>
-		<<if $arcologies[$i].direction != $arcologies[$j].direction>>
-			<<if $arcologies[$j].FSGenderRadicalist > $arcologies[$i].FSGenderRadicalist + _FSCrossThresh>>
-				<<if $showNeighborDetails != 0>>Gender Radicalism in $arcologies[$i].name is influenced by $arcologies[$j].name's more advanced society.<</if>>
-				<<set $arcologies[$i].FSGenderRadicalist += 1>>
-			<<elseif $arcologies[$j].FSGenderFundamentalist > $arcologies[$i].FSGenderRadicalist + _FSCrossThresh>>
-				<<if $showNeighborDetails != 0>>Development of Gender Radicalism in $arcologies[$i].name is slowed by contact with $arcologies[$j].name's more advanced Gender Fundamentalist society.<</if>>
-				<<set $arcologies[$i].FSGenderRadicalist -= 1>>
-			<</if>>
-		<</if>>
-	<</for>>
+	<<= _passive.output("FSGenderRadicalist")>>
 	<<if $arcologies[$i].direction != 0>>
 		<<if $arcologies[$i].FSGenderRadicalist >= $FSLockinLevel>>
 			<<if ($arcologies[$i].name.indexOf("Arcology") != -1) && (random(0,2) == 0)>>
@@ -921,17 +631,7 @@ has an estimated GSP of @@.yellowgreen;<<print cashFormat(_prosperity)>><<if $sh
 		<</if>>
 	<</if>>
 <<elseif $arcologies[$i].FSGenderFundamentalist != "unset">>
-	<<for $j = 0; $j < $arcologies.length; $j++>>
-		<<if $arcologies[$i].direction != $arcologies[$j].direction>>
-			<<if $arcologies[$j].FSGenderFundamentalist > $arcologies[$i].FSGenderFundamentalist + _FSCrossThresh>>
-				<<if $showNeighborDetails != 0>>Gender Fundamentalism in $arcologies[$i].name is influenced by $arcologies[$j].name's more advanced society.<</if>>
-				<<set $arcologies[$i].FSGenderFundamentalist += 1>>
-			<<elseif $arcologies[$j].FSGenderRadicalist > $arcologies[$i].FSGenderFundamentalist + _FSCrossThresh>>
-				<<if $showNeighborDetails != 0>>Development of Gender Fundamentalism in $arcologies[$i].name is slowed by contact with $arcologies[$j].name's more advanced Gender Radicalist society.<</if>>
-				<<set $arcologies[$i].FSGenderFundamentalist -= 1>>
-			<</if>>
-		<</if>>
-	<</for>>
+	<<= _passive.output("FSGenderFundamentalist")>>
 	<<if $arcologies[$i].direction != 0>>
 		<<if $arcologies[$i].FSGenderFundamentalist >= $FSLockinLevel>>
 			<<if ($arcologies[$i].name.indexOf("Arcology") != -1) && (random(0,2) == 0)>>
@@ -956,17 +656,7 @@ has an estimated GSP of @@.yellowgreen;<<print cashFormat(_prosperity)>><<if $sh
 <</if>>
 
 <<if $arcologies[$i].FSPaternalist != "unset">>
-	<<for $j = 0; $j < $arcologies.length; $j++>>
-		<<if $arcologies[$i].direction != $arcologies[$j].direction>>
-			<<if $arcologies[$j].FSPaternalist > $arcologies[$i].FSPaternalist + _FSCrossThresh>>
-				<<if $showNeighborDetails != 0>>Paternalism in $arcologies[$i].name is influenced by $arcologies[$j].name's more advanced society.<</if>>
-				<<set $arcologies[$i].FSPaternalist += 1>>
-			<<elseif $arcologies[$j].FSDegradationist > $arcologies[$i].FSPaternalist + _FSCrossThresh>>
-				<<if $showNeighborDetails != 0>>Development of Paternalism in $arcologies[$i].name is slowed by contact with $arcologies[$j].name's more advanced Degradationist society.<</if>>
-				<<set $arcologies[$i].FSPaternalist -= 1>>
-			<</if>>
-		<</if>>
-	<</for>>
+	<<= _passive.output("FSPaternalist")>>
 	<<if $arcologies[$i].direction != 0>>
 		<<if $arcologies[$i].FSPaternalist >= $FSLockinLevel>>
 			<<if ($arcologies[$i].name.indexOf("Arcology") != -1) && (random(0,2) == 0)>>
@@ -998,17 +688,7 @@ has an estimated GSP of @@.yellowgreen;<<print cashFormat(_prosperity)>><<if $sh
 		<</if>>
 	<</if>>
 <<elseif $arcologies[$i].FSDegradationist != "unset">>
-	<<for $j = 0; $j < $arcologies.length; $j++>>
-		<<if $arcologies[$i].direction != $arcologies[$j].direction>>
-			<<if $arcologies[$j].FSDegradationist > $arcologies[$i].FSDegradationist + _FSCrossThresh>>
-				<<if $showNeighborDetails != 0>>Degradationism in $arcologies[$i].name is influenced by $arcologies[$j].name's more advanced society.<</if>>
-				<<set $arcologies[$i].FSDegradationist += 1>>
-			<<elseif $arcologies[$j].FSPaternalist > $arcologies[$i].FSDegradationist + _FSCrossThresh>>
-				<<if $showNeighborDetails != 0>>Development of Degradationism in $arcologies[$i].name is slowed by contact with $arcologies[$j].name's more advanced Paternalist society.<</if>>
-				<<set $arcologies[$i].FSDegradationist -= 1>>
-			<</if>>
-		<</if>>
-	<</for>>
+	<<= _passive.output("FSDegradationist")>>
 	<<if $arcologies[$i].direction != 0>>
 		<<if $arcologies[$i].FSDegradationist >= $FSLockinLevel>>
 			<<if ($arcologies[$i].name.indexOf("Arcology") != -1) && (random(0,2) == 0)>>
@@ -1042,17 +722,7 @@ has an estimated GSP of @@.yellowgreen;<<print cashFormat(_prosperity)>><<if $sh
 <</if>>
 
 <<if $arcologies[$i].FSIntellectualDependency != "unset">>
-	<<for $j = 0; $j < $arcologies.length; $j++>>
-		<<if $arcologies[$i].direction != $arcologies[$j].direction>>
-			<<if $arcologies[$j].FSIntellectualDependency > $arcologies[$i].FSIntellectualDependency + _FSCrossThresh>>
-				<<if $showNeighborDetails != 0>>Intellectual Dependency in $arcologies[$i].name is influenced by $arcologies[$j].name's more advanced society.<</if>>
-				<<set $arcologies[$i].FSIntellectualDependency += 1>>
-			<<elseif $arcologies[$j].FSSlaveProfessionalism > $arcologies[$i].FSIntellectualDependency + _FSCrossThresh>>
-				<<if $showNeighborDetails != 0>>Development of Intellectual Dependency in $arcologies[$i].name is slowed by contact with $arcologies[$j].name's more advanced Slave Professionalism society.<</if>>
-				<<set $arcologies[$i].FSIntellectualDependency -= 1>>
-			<</if>>
-		<</if>>
-	<</for>>
+	<<= _passive.output("FSIntellectualDependency")>>
 	<<if $arcologies[$i].direction != 0>>
 		<<if $arcologies[$i].FSIntellectualDependency >= $FSLockinLevel>>
 			<<if ($arcologies[$i].name.indexOf("Arcology") != -1) && (random(0,2) == 0)>>
@@ -1079,17 +749,7 @@ has an estimated GSP of @@.yellowgreen;<<print cashFormat(_prosperity)>><<if $sh
 		<</if>>
 	<</if>>
 <<elseif $arcologies[$i].FSSlaveProfessionalism != "unset">>
-	<<for $j = 0; $j < $arcologies.length; $j++>>
-		<<if $arcologies[$i].direction != $arcologies[$j].direction>>
-			<<if $arcologies[$j].FSSlaveProfessionalism > $arcologies[$i].FSSlaveProfessionalism + _FSCrossThresh>>
-				<<if $showNeighborDetails != 0>>Slave Professionalism in $arcologies[$i].name is influenced by $arcologies[$j].name's more advanced society.<</if>>
-				<<set $arcologies[$i].FSSlaveProfessionalism += 1>>
-			<<elseif $arcologies[$j].FSIntellectualDependency > $arcologies[$i].FSSlaveProfessionalism + _FSCrossThresh>>
-				<<if $showNeighborDetails != 0>>Development of Slave Professionalism in $arcologies[$i].name is slowed by contact with $arcologies[$j].name's more advanced Intellectual Dependency society.<</if>>
-				<<set $arcologies[$i].FSSlaveProfessionalism -= 1>>
-			<</if>>
-		<</if>>
-	<</for>>
+	<<= _passive.output("FSSlaveProfessionalism")>>
 	<<if $arcologies[$i].direction != 0>>
 		<<if $arcologies[$i].FSSlaveProfessionalism >= $FSLockinLevel>>
 			<<if ($arcologies[$i].name.indexOf("Arcology") != -1) && (random(0,2) == 0)>>
@@ -1133,17 +793,7 @@ has an estimated GSP of @@.yellowgreen;<<print cashFormat(_prosperity)>><<if $sh
 <</if>>
 
 <<if $arcologies[$i].FSBodyPurist != "unset">>
-	<<for $j = 0; $j < $arcologies.length; $j++>>
-		<<if $arcologies[$i].direction != $arcologies[$j].direction>>
-			<<if $arcologies[$j].FSBodyPurist > $arcologies[$i].FSBodyPurist + _FSCrossThresh>>
-				<<if $showNeighborDetails != 0>>Body Purism in $arcologies[$i].name is influenced by $arcologies[$j].name's more advanced society.<</if>>
-				<<set $arcologies[$i].FSBodyPurist += 1>>
-			<<elseif $arcologies[$j].FSTransformationFetishist > $arcologies[$i].FSBodyPurist + _FSCrossThresh>>
-				<<if $showNeighborDetails != 0>>Development of Body Purism in $arcologies[$i].name is slowed by contact with $arcologies[$j].name's more advanced Transformation Fetishist society.<</if>>
-				<<set $arcologies[$i].FSBodyPurist -= 1>>
-			<</if>>
-		<</if>>
-	<</for>>
+	<<= _passive.output("FSBodyPurist")>>
 	<<if $arcologies[$i].direction != 0>>
 		<<if $arcologies[$i].FSBodyPurist >= $FSLockinLevel>>
 			<<if ($arcologies[$i].name.indexOf("Arcology") != -1) && (random(0,2) == 0)>>
@@ -1168,17 +818,7 @@ has an estimated GSP of @@.yellowgreen;<<print cashFormat(_prosperity)>><<if $sh
 		<</if>>
 	<</if>>
 <<elseif $arcologies[$i].FSTransformationFetishist != "unset">>
-	<<for $j = 0; $j < $arcologies.length; $j++>>
-		<<if $arcologies[$i].direction != $arcologies[$j].direction>>
-			<<if $arcologies[$j].FSTransformationFetishist > $arcologies[$i].FSTransformationFetishist + _FSCrossThresh>>
-				<<if $showNeighborDetails != 0>>Transformation Fetishism in $arcologies[$i].name is influenced by $arcologies[$j].name's more advanced society.<</if>>
-				<<set $arcologies[$i].FSTransformationFetishist += 1>>
-			<<elseif $arcologies[$j].FSBodyPurist > $arcologies[$i].FSTransformationFetishist + _FSCrossThresh>>
-				<<if $showNeighborDetails != 0>>Development of Transformation Fetishism in $arcologies[$i].name is slowed by contact with $arcologies[$j].name's more advanced Body Purist society.<</if>>
-				<<set $arcologies[$i].FSTransformationFetishist -= 1>>
-			<</if>>
-		<</if>>
-	<</for>>
+	<<= _passive.output("FSTransformationFetishist")>>
 	<<if $arcologies[$i].direction != 0>>
 		<<if $arcologies[$i].FSTransformationFetishist >= $FSLockinLevel>>
 			<<if ($arcologies[$i].name.indexOf("Arcology") != -1) && (random(0,2) == 0)>>
@@ -1208,17 +848,7 @@ has an estimated GSP of @@.yellowgreen;<<print cashFormat(_prosperity)>><<if $sh
 <</if>>
 
 <<if $arcologies[$i].FSYouthPreferentialist != "unset">>
-	<<for $j = 0; $j < $arcologies.length; $j++>>
-		<<if $arcologies[$i].direction != $arcologies[$j].direction>>
-			<<if $arcologies[$j].FSYouthPreferentialist > $arcologies[$i].FSYouthPreferentialist + _FSCrossThresh>>
-				<<if $showNeighborDetails != 0>>Youth Preferentialism in $arcologies[$i].name is influenced by $arcologies[$j].name's more advanced society.<</if>>
-				<<set $arcologies[$i].FSYouthPreferentialist += 1>>
-			<<elseif $arcologies[$j].FSMaturityPreferentialist > $arcologies[$i].FSYouthPreferentialist + _FSCrossThresh>>
-				<<if $showNeighborDetails != 0>>Development of Youth Preferentialism in $arcologies[$i].name is slowed by contact with $arcologies[$j].name's more advanced Maturity Preferentialist society.<</if>>
-				<<set $arcologies[$i].FSYouthPreferentialist -= 1>>
-			<</if>>
-		<</if>>
-	<</for>>
+	<<= _passive.output("FSYouthPreferentialist")>>
 	<<if $arcologies[$i].direction != 0>>
 		<<if $arcologies[$i].FSYouthPreferentialist >= $FSLockinLevel>>
 			<<if ($arcologies[$i].name.indexOf("Arcology") != -1) && (random(0,2) == 0)>>
@@ -1248,17 +878,7 @@ has an estimated GSP of @@.yellowgreen;<<print cashFormat(_prosperity)>><<if $sh
 		<</if>>
 	<</if>>
 <<elseif $arcologies[$i].FSMaturityPreferentialist != "unset">>
-	<<for $j = 0; $j < $arcologies.length; $j++>>
-		<<if $arcologies[$i].direction != $arcologies[$j].direction>>
-			<<if $arcologies[$j].FSMaturityPreferentialist > $arcologies[$i].FSMaturityPreferentialist + _FSCrossThresh>>
-				<<if $showNeighborDetails != 0>>Maturity Preferentialism in $arcologies[$i].name is influenced by $arcologies[$j].name's more advanced society.<</if>>
-				<<set $arcologies[$i].FSMaturityPreferentialist += 1>>
-			<<elseif $arcologies[$j].FSYouthPreferentialist > $arcologies[$i].FSMaturityPreferentialist + _FSCrossThresh>>
-				<<if $showNeighborDetails != 0>>Development of Maturity Preferentialism in $arcologies[$i].name is slowed by contact with $arcologies[$j].name's more advanced Youth Preferentialist society.<</if>>
-				<<set $arcologies[$i].FSMaturityPreferentialist -= 1>>
-			<</if>>
-		<</if>>
-	<</for>>
+	<<= _passive.output("FSMaturityPreferentialist")>>
 	<<if $arcologies[$i].direction != 0>>
 		<<if $arcologies[$i].FSMaturityPreferentialist >= $FSLockinLevel>>
 			<<if ($arcologies[$i].name.indexOf("Arcology") != -1) && (random(0,2) == 0)>>
@@ -1283,17 +903,7 @@ has an estimated GSP of @@.yellowgreen;<<print cashFormat(_prosperity)>><<if $sh
 <</if>>
 
 <<if $arcologies[$i].FSPetiteAdmiration != "unset">>
-	<<for $j = 0; $j < $arcologies.length; $j++>>
-		<<if $arcologies[$i].direction != $arcologies[$j].direction>>
-			<<if $arcologies[$j].FSPetiteAdmiration > $arcologies[$i].FSPetiteAdmiration + _FSCrossThresh>>
-				<<if $showNeighborDetails != 0>>Petite Admiration in $arcologies[$i].name is influenced by $arcologies[$j].name's more advanced society.<</if>>
-				<<set $arcologies[$i].FSPetiteAdmiration += 1>>
-			<<elseif $arcologies[$j].FSStatuesqueGlorification > $arcologies[$i].FSPetiteAdmiration + _FSCrossThresh>>
-				<<if $showNeighborDetails != 0>>Development of Petite Admiration in $arcologies[$i].name is slowed by contact with $arcologies[$j].name's more advanced Statuesque Glorification society.<</if>>
-				<<set $arcologies[$i].FSPetiteAdmiration -= 1>>
-			<</if>>
-		<</if>>
-	<</for>>
+	<<= _passive.output("FSPetiteAdmiration")>>
 	<<if $arcologies[$i].direction != 0>>
 		<<if $arcologies[$i].FSPetiteAdmiration >= $FSLockinLevel>>
 			<<if ($arcologies[$i].name.indexOf("Arcology") != -1) && (random(0,2) == 0)>>
@@ -1320,17 +930,7 @@ has an estimated GSP of @@.yellowgreen;<<print cashFormat(_prosperity)>><<if $sh
 		<</if>>
 	<</if>>
 <<elseif $arcologies[$i].FSStatuesqueGlorification != "unset">>
-	<<for $j = 0; $j < $arcologies.length; $j++>>
-		<<if $arcologies[$i].direction != $arcologies[$j].direction>>
-			<<if $arcologies[$j].FSStatuesqueGlorification > $arcologies[$i].FSStatuesqueGlorification + _FSCrossThresh>>
-				<<if $showNeighborDetails != 0>>Statuesque Glorification in $arcologies[$i].name is influenced by $arcologies[$j].name's more advanced society.<</if>>
-				<<set $arcologies[$i].FSStatuesqueGlorification += 1>>
-			<<elseif $arcologies[$j].FSPetiteAdmiration > $arcologies[$i].FSStatuesqueGlorification + _FSCrossThresh>>
-				<<if $showNeighborDetails != 0>>Development of Statuesque Glorification in $arcologies[$i].name is slowed by contact with $arcologies[$j].name's more advanced Petite Admiration society.<</if>>
-				<<set $arcologies[$i].FSStatuesqueGlorification -= 1>>
-			<</if>>
-		<</if>>
-	<</for>>
+	<<= _passive.output("FSStatuesqueGlorification")>>
 	<<if $arcologies[$i].direction != 0>>
 		<<if $arcologies[$i].FSStatuesqueGlorification >= $FSLockinLevel>>
 			<<if ($arcologies[$i].name.indexOf("Arcology") != -1) && (random(0,2) == 0)>>
@@ -1359,17 +959,7 @@ has an estimated GSP of @@.yellowgreen;<<print cashFormat(_prosperity)>><<if $sh
 <</if>>
 
 <<if $arcologies[$i].FSSlimnessEnthusiast != "unset">>
-	<<for $j = 0; $j < $arcologies.length; $j++>>
-		<<if $arcologies[$i].direction != $arcologies[$j].direction>>
-			<<if $arcologies[$j].FSSlimnessEnthusiast > $arcologies[$i].FSSlimnessEnthusiast + _FSCrossThresh>>
-				<<if $showNeighborDetails != 0>>Slimness Enthusiasm in $arcologies[$i].name is influenced by $arcologies[$j].name's more advanced society.<</if>>
-				<<set $arcologies[$i].FSSlimnessEnthusiast += 1>>
-			<<elseif $arcologies[$j].FSAssetExpansionist > $arcologies[$i].FSSlimnessEnthusiast + _FSCrossThresh>>
-				<<if $showNeighborDetails != 0>>Development of Slimness Enthusiasm in $arcologies[$i].name is slowed by contact with $arcologies[$j].name's more advanced Asset Expansionist society.<</if>>
-				<<set $arcologies[$i].FSSlimnessEnthusiast -= 1>>
-			<</if>>
-		<</if>>
-	<</for>>
+	<<= _passive.output("FSSlimnessEnthusiast")>>
 	<<if $arcologies[$i].direction != 0>>
 		<<if $arcologies[$i].FSSlimnessEnthusiast >= $FSLockinLevel>>
 			<<if ($arcologies[$i].name.indexOf("Arcology") != -1) && (random(0,2) == 0)>>
@@ -1395,17 +985,7 @@ has an estimated GSP of @@.yellowgreen;<<print cashFormat(_prosperity)>><<if $sh
 		<</if>>
 	<</if>>
 <<elseif $arcologies[$i].FSAssetExpansionist != "unset">>
-	<<for $j = 0; $j < $arcologies.length; $j++>>
-		<<if $arcologies[$i].direction != $arcologies[$j].direction>>
-			<<if $arcologies[$j].FSAssetExpansionist > $arcologies[$i].FSAssetExpansionist + _FSCrossThresh>>
-				<<if $showNeighborDetails != 0>>Asset Expansionism in $arcologies[$i].name is influenced by $arcologies[$j].name's more advanced society.<</if>>
-				<<set $arcologies[$i].FSAssetExpansionist += 1>>
-			<<elseif $arcologies[$j].FSSlimnessEnthusiast > $arcologies[$i].FSAssetExpansionist + _FSCrossThresh>>
-				<<if $showNeighborDetails != 0>>Development of Asset Expansionism in $arcologies[$i].name is slowed by contact with $arcologies[$j].name's more advanced Slimness Enthusiast society.<</if>>
-				<<set $arcologies[$i].FSAssetExpansionist -= 1>>
-			<</if>>
-		<</if>>
-	<</for>>
+	<<= _passive.output("FSAssetExpansionist")>>
 	<<if $arcologies[$i].direction != 0>>
 		<<if $arcologies[$i].FSAssetExpansionist >= $FSLockinLevel>>
 			<<if ($arcologies[$i].name.indexOf("Arcology") != -1) && (random(0,2) == 0)>>
@@ -1439,14 +1019,7 @@ has an estimated GSP of @@.yellowgreen;<<print cashFormat(_prosperity)>><<if $sh
 <</if>>
 
 <<if $arcologies[$i].FSPastoralist != "unset">>
-	<<for $j = 0; $j < $arcologies.length; $j++>>
-		<<if $arcologies[$i].direction != $arcologies[$j].direction>>
-			<<if $arcologies[$j].FSPastoralist > $arcologies[$i].FSPastoralist + _FSCrossThresh>>
-				<<if $showNeighborDetails != 0>>Pastoralism in $arcologies[$i].name is influenced by $arcologies[$j].name's more advanced society.<</if>>
-				<<set $arcologies[$i].FSPastoralist += 1>>
-			<</if>>
-		<</if>>
-	<</for>>
+	<<= _passive.output("FSPastoralist")>>
 	<<if $arcologies[$i].direction != 0>>
 		<<if $arcologies[$i].FSPastoralist >= $FSLockinLevel>>
 			<<if ($arcologies[$i].name.indexOf("Arcology") != -1) && (random(0,2) == 0)>>
@@ -1473,17 +1046,7 @@ has an estimated GSP of @@.yellowgreen;<<print cashFormat(_prosperity)>><<if $sh
 		<</if>>
 	<</if>>
 <<elseif $arcologies[$i].FSCummunism != "unset">>
-	<<for $j = 0; $j < $arcologies.length; $j++>>
-		<<if $arcologies[$i].direction != $arcologies[$j].direction>>
-			<<if $arcologies[$j].FSCummunism > $arcologies[$i].FSCummunism + _FSCrossThresh>>
-				<<if $showNeighborDetails != 0>>Cummunism in $arcologies[$i].name is influenced by $arcologies[$j].name's more advanced society.<</if>>
-				<<set $arcologies[$i].FSCummunism += 1>>
-			<<elseif $arcologies[$j].FSPastoralist > $arcologies[$i].FSCummunism + _FSCrossThresh>>
-				<<if $showNeighborDetails != 0>>Development of Cummunism in $arcologies[$i].name is slowed by contact with $arcologies[$j].name's more advanced Pastoralist society.<</if>>
-				<<set $arcologies[$i].FSCummunism -= 1>>
-			<</if>>
-		<</if>>
-	<</for>>
+	<<= _passive.output("FSCummunism")>>
 	<<if $arcologies[$i].direction != 0>>
 		<<if $arcologies[$i].FSCummunism >= $FSLockinLevel>>
 			<<if ($arcologies[$i].name.indexOf("Arcology") != -1) && (random(0,2) == 0)>>
@@ -1516,17 +1079,7 @@ has an estimated GSP of @@.yellowgreen;<<print cashFormat(_prosperity)>><<if $sh
 <</if>>
 
 <<if $arcologies[$i].FSPhysicalIdealist != "unset">>
-	<<for $j = 0; $j < $arcologies.length; $j++>>
-		<<if $arcologies[$i].direction != $arcologies[$j].direction>>
-			<<if $arcologies[$j].FSPhysicalIdealist > $arcologies[$i].FSPhysicalIdealist + _FSCrossThresh>>
-				<<if $showNeighborDetails != 0>>Physical Idealism in $arcologies[$i].name is influenced by $arcologies[$j].name's more advanced society.<</if>>
-				<<set $arcologies[$i].FSPhysicalIdealist += 1>>
-			<<elseif $arcologies[$j].FSHedonisticDecadence > $arcologies[$i].FSPhysicalIdealist + _FSCrossThresh>>
-				<<if $showNeighborDetails != 0>>Development of Physical Idealism in $arcologies[$i].name is slowed by contact with $arcologies[$j].name's more advanced Decadent Hedonism society.<</if>>
-				<<set $arcologies[$i].FSPhysicalIdealist -= 1>>
-			<</if>>
-		<</if>>
-	<</for>>
+	<<= _passive.output("FSPhysicalIdealist")>>
 	<<if $arcologies[$i].direction != 0>>
 		<<if $arcologies[$i].FSPhysicalIdealist >= $FSLockinLevel>>
 			<<if ($arcologies[$i].name.indexOf("Arcology") != -1) && (random(0,2) == 0)>>
@@ -1557,17 +1110,7 @@ has an estimated GSP of @@.yellowgreen;<<print cashFormat(_prosperity)>><<if $sh
 		<</if>>
 	<</if>>
 <<elseif $arcologies[$i].FSHedonisticDecadence != "unset">>
-	<<for $j = 0; $j < $arcologies.length; $j++>>
-		<<if $arcologies[$i].direction != $arcologies[$j].direction>>
-			<<if $arcologies[$j].FSHedonisticDecadence > $arcologies[$i].FSHedonisticDecadence + _FSCrossThresh>>
-				<<if $showNeighborDetails != 0>>Decadent Hedonism in $arcologies[$i].name is influenced by $arcologies[$j].name's more advanced society.<</if>>
-				<<set $arcologies[$i].FSHedonisticDecadence += 1>>
-			<<elseif $arcologies[$j].FSPhysicalIdealist > $arcologies[$i].FSHedonisticDecadence + _FSCrossThresh>>
-				<<if $showNeighborDetails != 0>>Development of Decadent Hedonism in $arcologies[$i].name is slowed by contact with $arcologies[$j].name's more advanced Physical Idealism society.<</if>>
-				<<set $arcologies[$i].FSHedonisticDecadence -= 1>>
-			<</if>>
-		<</if>>
-	<</for>>
+	<<= _passive.output("FSHedonisticDecadence")>>
 	<<if $arcologies[$i].direction != 0>>
 		<<if $arcologies[$i].FSHedonisticDecadence >= $FSLockinLevel>>
 			<<if ($arcologies[$i].name.indexOf("Arcology") != -1) && (random(0,2) == 0)>>
@@ -1597,14 +1140,7 @@ has an estimated GSP of @@.yellowgreen;<<print cashFormat(_prosperity)>><<if $sh
 <</if>>
 
 <<if $arcologies[$i].FSIncestFetishist != "unset">>
-	<<for $j = 0; $j < $arcologies.length; $j++>>
-		<<if $arcologies[$i].direction != $arcologies[$j].direction>>
-			<<if $arcologies[$j].FSIncestFetishist > $arcologies[$i].FSIncestFetishist + _FSCrossThresh>>
-				<<if $showNeighborDetails != 0>>Incest Fetishism in $arcologies[$i].name is influenced by $arcologies[$j].name's more advanced society.<</if>>
-				<<set $arcologies[$i].FSIncestFetishist += 1>>
-			<</if>>
-		<</if>>
-	<</for>>
+	<<= _passive.output("FSIncestFetishist")>>
 	<<if $arcologies[$i].direction != 0>>
 		<<if $arcologies[$i].FSIncestFetishist >= $FSLockinLevel>>
 			<<if ($arcologies[$i].name.indexOf("Arcology") != -1) && (random(0,2) == 0)>>
@@ -1629,14 +1165,7 @@ has an estimated GSP of @@.yellowgreen;<<print cashFormat(_prosperity)>><<if $sh
 <</if>>
 
 <<if $arcologies[$i].FSChattelReligionist != "unset">>
-	<<for $j = 0; $j < $arcologies.length; $j++>>
-		<<if $arcologies[$i].direction != $arcologies[$j].direction>>
-			<<if $arcologies[$j].FSChattelReligionist > $arcologies[$i].FSChattelReligionist + _FSCrossThresh>>
-				<<if $showNeighborDetails != 0>>Chattel Religionism in $arcologies[$i].name is influenced by $arcologies[$j].name's more advanced society.<</if>>
-				<<set $arcologies[$i].FSChattelReligionist += 1>>
-			<</if>>
-		<</if>>
-	<</for>>
+	<<= _passive.output("FSChattelReligionist")>>
 	<<if $arcologies[$i].direction != 0>>
 		<<if $arcologies[$i].FSChattelReligionist >= $FSLockinLevel>>
 			<<if ($arcologies[$i].name.indexOf("Arcology") != -1) && (random(0,2) == 0)>>
@@ -1665,29 +1194,7 @@ has an estimated GSP of @@.yellowgreen;<<print cashFormat(_prosperity)>><<if $sh
 <</if>>
 
 <<if $arcologies[$i].FSRomanRevivalist != "unset">>
-	<<for $j = 0; $j < $arcologies.length; $j++>>
-		<<if $arcologies[$i].direction != $arcologies[$j].direction>>
-			<<if $arcologies[$j].FSRomanRevivalist > $arcologies[$i].FSRomanRevivalist + _FSCrossThresh>>
-				<<if $showNeighborDetails != 0>>Roman Revivalism in $arcologies[$i].name is influenced by $arcologies[$j].name's more advanced society.<</if>>
-				<<set $arcologies[$i].FSRomanRevivalist += 1>>
-			<<elseif $arcologies[$j].FSAztecRevivalist > $arcologies[$i].FSRomanRevivalist + _FSCrossThresh>>
-				<<if $showNeighborDetails != 0>>Development of Roman Revivalism in $arcologies[$i].name is slowed by contact with $arcologies[$j].name's more advanced Aztec Revivalist society.<</if>>
-				<<set $arcologies[$i].FSRomanRevivalist -= 1>>
-			<<elseif $arcologies[$j].FSChineseRevivalist > $arcologies[$i].FSRomanRevivalist + _FSCrossThresh>>
-				<<if $showNeighborDetails != 0>>Development of Roman Revivalism in $arcologies[$i].name is slowed by contact with $arcologies[$j].name's more advanced Chinese Revivalist society.<</if>>
-				<<set $arcologies[$i].FSRomanRevivalist -= 1>>
-			<<elseif $arcologies[$j].FSEgyptianRevivalist > $arcologies[$i].FSRomanRevivalist + _FSCrossThresh>>
-				<<if $showNeighborDetails != 0>>Development of Roman Revivalism in $arcologies[$i].name is slowed by contact with $arcologies[$j].name's more advanced Egyptian Revivalist society.<</if>>
-				<<set $arcologies[$i].FSRomanRevivalist -= 1>>
-			<<elseif $arcologies[$j].FSEdoRevivalist > $arcologies[$i].FSRomanRevivalist + _FSCrossThresh>>
-				<<if $showNeighborDetails != 0>>Development of Roman Revivalism in $arcologies[$i].name is slowed by contact with $arcologies[$j].name's more advanced Edo Revivalist society.<</if>>
-				<<set $arcologies[$i].FSRomanRevivalist -= 1>>
-			<<elseif $arcologies[$j].FSArabianRevivalist > $arcologies[$i].FSRomanRevivalist + _FSCrossThresh>>
-				<<if $showNeighborDetails != 0>>Development of Roman Revivalism in $arcologies[$i].name is slowed by contact with $arcologies[$j].name's more advanced Arabian Revivalist society.<</if>>
-				<<set $arcologies[$i].FSRomanRevivalist -= 1>>
-			<</if>>
-		<</if>>
-	<</for>>
+	<<= _passive.output("FSRomanRevivalist")>>
 	<<if $arcologies[$i].direction != 0>>
 		<<if $arcologies[$i].FSRomanRevivalist >= $FSLockinLevel>>
 			<<if ($arcologies[$i].name.indexOf("Arcology") != -1) && (random(0,2) == 0)>>
@@ -1710,29 +1217,7 @@ has an estimated GSP of @@.yellowgreen;<<print cashFormat(_prosperity)>><<if $sh
 		<</if>>
 	<</if>>
 <<elseif $arcologies[$i].FSAztecRevivalist != "unset">>
-	<<for $j = 0; $j < $arcologies.length; $j++>>
-		<<if $arcologies[$i].direction != $arcologies[$j].direction>>
-			<<if $arcologies[$j].FSAztecRevivalist > $arcologies[$i].FSAztecRevivalist + _FSCrossThresh>>
-				<<if $showNeighborDetails != 0>>Aztec Revivalism in $arcologies[$i].name is influenced by $arcologies[$j].name's more advanced society.<</if>>
-				<<set $arcologies[$i].FSAztecRevivalist += 1>>
-			<<elseif $arcologies[$j].FSEgyptianRevivalist > $arcologies[$i].FSAztecRevivalist + _FSCrossThresh>>
-				<<if $showNeighborDetails != 0>>Development of Aztec Revivalism in $arcologies[$i].name is slowed by contact with $arcologies[$j].name's more advanced Egyptian Revivalist society.<</if>>
-				<<set $arcologies[$i].FSAztecRevivalist -= 1>>
-			<<elseif $arcologies[$j].FSRomanRevivalist > $arcologies[$i].FSAztecRevivalist + _FSCrossThresh>>
-				<<if $showNeighborDetails != 0>>Development of Aztec Revivalism in $arcologies[$i].name is slowed by contact with $arcologies[$j].name's more advanced Roman Revivalist society.<</if>>
-				<<set $arcologies[$i].FSAztecRevivalist -= 1>>
-			<<elseif $arcologies[$j].FSChineseRevivalist > $arcologies[$i].FSAztecRevivalist + _FSCrossThresh>>
-				<<if $showNeighborDetails != 0>>Development of Aztec Revivalism in $arcologies[$i].name is slowed by contact with $arcologies[$j].name's more advanced Chinese Revivalist society.<</if>>
-				<<set $arcologies[$i].FSAztecRevivalist -= 1>>
-			<<elseif $arcologies[$j].FSEdoRevivalist > $arcologies[$i].FSAztecRevivalist + _FSCrossThresh>>
-				<<if $showNeighborDetails != 0>>Development of Aztec Revivalism in $arcologies[$i].name is slowed by contact with $arcologies[$j].name's more advanced Edo Revivalist society.<</if>>
-				<<set $arcologies[$i].FSAztecRevivalist -= 1>>
-			<<elseif $arcologies[$j].FSArabianRevivalist > $arcologies[$i].FSAztecRevivalist + _FSCrossThresh>>
-				<<if $showNeighborDetails != 0>>Development of Aztec Revivalism in $arcologies[$i].name is slowed by contact with $arcologies[$j].name's more advanced Arabian Revivalist society.<</if>>
-				<<set $arcologies[$i].FSAztecRevivalist -= 1>>
-			<</if>>
-		<</if>>
-	<</for>>
+	<<= _passive.output("FSAztecRevivalist")>>
 	<<if $arcologies[$i].direction != 0>>
 		<<if $arcologies[$i].FSAztecRevivalist >= $FSLockinLevel>>
 			<<if ($arcologies[$i].name.indexOf("Arcology") != -1) && (random(0,2) == 0)>>
@@ -1755,29 +1240,7 @@ has an estimated GSP of @@.yellowgreen;<<print cashFormat(_prosperity)>><<if $sh
 		<</if>>
 	<</if>>
 <<elseif $arcologies[$i].FSEgyptianRevivalist != "unset">>
-	<<for $j = 0; $j < $arcologies.length; $j++>>
-		<<if $arcologies[$i].direction != $arcologies[$j].direction>>
-			<<if $arcologies[$j].FSEgyptianRevivalist > $arcologies[$i].FSEgyptianRevivalist + _FSCrossThresh>>
-				<<if $showNeighborDetails != 0>>Egyptian Revivalism in $arcologies[$i].name is influenced by $arcologies[$j].name's more advanced society.<</if>>
-				<<set $arcologies[$i].FSEgyptianRevivalist += 1>>
-			<<elseif $arcologies[$j].FSRomanRevivalist > $arcologies[$i].FSEgyptianRevivalist + _FSCrossThresh>>
-				<<if $showNeighborDetails != 0>>Development of Egyptian Revivalism in $arcologies[$i].name is slowed by contact with $arcologies[$j].name's more advanced Roman Revivalist society.<</if>>
-				<<set $arcologies[$i].FSEgyptianRevivalist -= 1>>
-			<<elseif $arcologies[$j].FSAztecRevivalist > $arcologies[$i].FSEgyptianRevivalist + _FSCrossThresh>>
-				<<if $showNeighborDetails != 0>>Development of Egyptian Revivalism in $arcologies[$i].name is slowed by contact with $arcologies[$j].name's more advanced Aztec Revivalist society.<</if>>
-				<<set $arcologies[$i].FSEgyptianRevivalist -= 1>>
-			<<elseif $arcologies[$j].FSEgyptianRevivalist > $arcologies[$i].FSEgyptianRevivalist + _FSCrossThresh>>
-				<<if $showNeighborDetails != 0>>Development of Egyptian Revivalism in $arcologies[$i].name is slowed by contact with $arcologies[$j].name's more advanced Chinese Revivalist society.<</if>>
-				<<set $arcologies[$i].FSEgyptianRevivalist -= 1>>
-			<<elseif $arcologies[$j].FSEdoRevivalist > $arcologies[$i].FSEgyptianRevivalist + _FSCrossThresh>>
-				<<if $showNeighborDetails != 0>>Development of Egyptian Revivalism in $arcologies[$i].name is slowed by contact with $arcologies[$j].name's more advanced Edo Revivalist society.<</if>>
-				<<set $arcologies[$i].FSEgyptianRevivalist -= 1>>
-			<<elseif $arcologies[$j].FSArabianRevivalist > $arcologies[$i].FSEgyptianRevivalist + _FSCrossThresh>>
-				<<if $showNeighborDetails != 0>>Development of Egyptian Revivalism in $arcologies[$i].name is slowed by contact with $arcologies[$j].name's more advanced Arabian Revivalist society.<</if>>
-				<<set $arcologies[$i].FSEgyptianRevivalist -= 1>>
-			<</if>>
-		<</if>>
-	<</for>>
+	<<= _passive.output("FSEgyptianRevivalist")>>
 	<<if $arcologies[$i].direction != 0>>
 		<<if $arcologies[$i].FSEgyptianRevivalist >= $FSLockinLevel>>
 			<<if ($arcologies[$i].name.indexOf("Arcology") != -1) && (random(0,2) == 0)>>
@@ -1800,29 +1263,7 @@ has an estimated GSP of @@.yellowgreen;<<print cashFormat(_prosperity)>><<if $sh
 		<</if>>
 	<</if>>
 <<elseif $arcologies[$i].FSEdoRevivalist != "unset">>
-	<<for $j = 0; $j < $arcologies.length; $j++>>
-		<<if $arcologies[$i].direction != $arcologies[$j].direction>>
-			<<if $arcologies[$j].FSEdoRevivalist > $arcologies[$i].FSEdoRevivalist + _FSCrossThresh>>
-				<<if $showNeighborDetails != 0>>Edo Revivalism in $arcologies[$i].name is influenced by $arcologies[$j].name's more advanced society.<</if>>
-				<<set $arcologies[$i].FSEdoRevivalist += 1>>
-			<<elseif $arcologies[$j].FSRomanRevivalist > $arcologies[$i].FSEdoRevivalist + _FSCrossThresh>>
-				<<if $showNeighborDetails != 0>>Development of Edo Revivalism in $arcologies[$i].name is slowed by contact with $arcologies[$j].name's more advanced Roman Revivalist society.<</if>>
-				<<set $arcologies[$i].FSEdoRevivalist -= 1>>
-			<<elseif $arcologies[$j].FSAztecRevivalist > $arcologies[$i].FSEdoRevivalist + _FSCrossThresh>>
-				<<if $showNeighborDetails != 0>>Development of Edo Revivalism in $arcologies[$i].name is slowed by contact with $arcologies[$j].name's more advanced Aztec Revivalist society.<</if>>
-				<<set $arcologies[$i].FSEdoRevivalist -= 1>>
-			<<elseif $arcologies[$j].FSEgyptianRevivalist > $arcologies[$i].FSEdoRevivalist + _FSCrossThresh>>
-				<<if $showNeighborDetails != 0>>Development of Edo Revivalism in $arcologies[$i].name is slowed by contact with $arcologies[$j].name's more advanced Egyptian Revivalist society.<</if>>
-				<<set $arcologies[$i].FSEdoRevivalist -= 1>>
-			<<elseif $arcologies[$j].FSChineseRevivalist > $arcologies[$i].FSEdoRevivalist + _FSCrossThresh>>
-				<<if $showNeighborDetails != 0>>Development of Edo Revivalism in $arcologies[$i].name is slowed by contact with $arcologies[$j].name's more advanced Chinese Revivalist society.<</if>>
-				<<set $arcologies[$i].FSEdoRevivalist -= 1>>
-			<<elseif $arcologies[$j].FSArabianRevivalist > $arcologies[$i].FSEdoRevivalist + _FSCrossThresh>>
-				<<if $showNeighborDetails != 0>>Development of Edo Revivalism in $arcologies[$i].name is slowed by contact with $arcologies[$j].name's more advanced Arabian Revivalist society.<</if>>
-				<<set $arcologies[$i].FSEdoRevivalist -= 1>>
-			<</if>>
-		<</if>>
-	<</for>>
+	<<= _passive.output("FSEdoRevivalist")>>
 	<<if $arcologies[$i].direction != 0>>
 		<<if $arcologies[$i].FSEdoRevivalist >= $FSLockinLevel>>
 			<<if ($arcologies[$i].name.indexOf("Arcology") != -1) && (random(0,2) == 0)>>
@@ -1845,29 +1286,7 @@ has an estimated GSP of @@.yellowgreen;<<print cashFormat(_prosperity)>><<if $sh
 		<</if>>
 	<</if>>
 <<elseif $arcologies[$i].FSArabianRevivalist != "unset">>
-	<<for $j = 0; $j < $arcologies.length; $j++>>
-		<<if $arcologies[$i].direction != $arcologies[$j].direction>>
-			<<if $arcologies[$j].FSArabianRevivalist > $arcologies[$i].FSArabianRevivalist + _FSCrossThresh>>
-				<<if $showNeighborDetails != 0>>Arabian Revivalism in $arcologies[$i].name is influenced by $arcologies[$j].name's more advanced society.<</if>>
-				<<set $arcologies[$i].FSArabianRevivalist += 1>>
-			<<elseif $arcologies[$j].FSRomanRevivalist > $arcologies[$i].FSArabianRevivalist + _FSCrossThresh>>
-				<<if $showNeighborDetails != 0>>Development of Arabian Revivalism in $arcologies[$i].name is slowed by contact with $arcologies[$j].name's more advanced Roman Revivalist society.<</if>>
-				<<set $arcologies[$i].FSArabianRevivalist -= 1>>
-			<<elseif $arcologies[$j].FSAztecRevivalist > $arcologies[$i].FSArabianRevivalist + _FSCrossThresh>>
-				<<if $showNeighborDetails != 0>>Development of Arabian Revivalism in $arcologies[$i].name is slowed by contact with $arcologies[$j].name's more advanced Aztec Revivalist society.<</if>>
-				<<set $arcologies[$i].FSArabianRevivalist -= 1>>
-			<<elseif $arcologies[$j].FSEgyptianRevivalist > $arcologies[$i].FSArabianRevivalist + _FSCrossThresh>>
-				<<if $showNeighborDetails != 0>>Development of Arabian Revivalism in $arcologies[$i].name is slowed by contact with $arcologies[$j].name's more advanced Egyptian Revivalist society.<</if>>
-				<<set $arcologies[$i].FSArabianRevivalist -= 1>>
-			<<elseif $arcologies[$j].FSEdoRevivalist > $arcologies[$i].FSArabianRevivalist + _FSCrossThresh>>
-				<<if $showNeighborDetails != 0>>Development of Arabian Revivalism in $arcologies[$i].name is slowed by contact with $arcologies[$j].name's more advanced Edo Revivalist society.<</if>>
-				<<set $arcologies[$i].FSArabianRevivalist -= 1>>
-			<<elseif $arcologies[$j].FSChineseRevivalist > $arcologies[$i].FSArabianRevivalist + _FSCrossThresh>>
-				<<if $showNeighborDetails != 0>>Development of Arabian Revivalism in $arcologies[$i].name is slowed by contact with $arcologies[$j].name's more advanced Chinese Revivalist society.<</if>>
-				<<set $arcologies[$i].FSArabianRevivalist -= 1>>
-			<</if>>
-		<</if>>
-	<</for>>
+	<<= _passive.output("FSArabianRevivalist")>>
 	<<if $arcologies[$i].direction != 0>>
 		<<if $arcologies[$i].FSArabianRevivalist >= $FSLockinLevel>>
 			<<if ($arcologies[$i].name.indexOf("Arcology") != -1) && (random(0,2) == 0)>>
@@ -1894,29 +1313,7 @@ has an estimated GSP of @@.yellowgreen;<<print cashFormat(_prosperity)>><<if $sh
 		<</if>>
 	<</if>>
 <<elseif $arcologies[$i].FSChineseRevivalist != "unset">>
-	<<for $j = 0; $j < $arcologies.length; $j++>>
-		<<if $arcologies[$i].direction != $arcologies[$j].direction>>
-			<<if $arcologies[$j].FSChineseRevivalist > $arcologies[$i].FSChineseRevivalist + _FSCrossThresh>>
-				<<if $showNeighborDetails != 0>>Chinese Revivalism in $arcologies[$i].name is influenced by $arcologies[$j].name's more advanced society.<</if>>
-				<<set $arcologies[$i].FSChineseRevivalist += 1>>
-			<<elseif $arcologies[$j].FSRomanRevivalist > $arcologies[$i].FSChineseRevivalist + _FSCrossThresh>>
-				<<if $showNeighborDetails != 0>>Development of Chinese Revivalism in $arcologies[$i].name is slowed by contact with $arcologies[$j].name's more advanced Roman Revivalist society.<</if>>
-				<<set $arcologies[$i].FSChineseRevivalist -= 1>>
-			<<elseif $arcologies[$j].FSAztecRevivalist > $arcologies[$i].FSChineseRevivalist + _FSCrossThresh>>
-				<<if $showNeighborDetails != 0>>Development of Chinese Revivalism in $arcologies[$i].name is slowed by contact with $arcologies[$j].name's more advanced Aztec Revivalist society.<</if>>
-				<<set $arcologies[$i].FSChineseRevivalist -= 1>>
-			<<elseif $arcologies[$j].FSEgyptianRevivalist > $arcologies[$i].FSChineseRevivalist + _FSCrossThresh>>
-				<<if $showNeighborDetails != 0>>Development of Chinese Revivalism in $arcologies[$i].name is slowed by contact with $arcologies[$j].name's more advanced Egyptian Revivalist society.<</if>>
-				<<set $arcologies[$i].FSChineseRevivalist -= 1>>
-			<<elseif $arcologies[$j].FSEdoRevivalist > $arcologies[$i].FSChineseRevivalist + _FSCrossThresh>>
-				<<if $showNeighborDetails != 0>>Development of Chinese Revivalism in $arcologies[$i].name is slowed by contact with $arcologies[$j].name's more advanced Edo Revivalist society.<</if>>
-				<<set $arcologies[$i].FSChineseRevivalist -= 1>>
-			<<elseif $arcologies[$j].FSArabianRevivalist > $arcologies[$i].FSChineseRevivalist + _FSCrossThresh>>
-				<<if $showNeighborDetails != 0>>Development of Chinese Revivalism in $arcologies[$i].name is slowed by contact with $arcologies[$j].name's more advanced Arabian Revivalist society.<</if>>
-				<<set $arcologies[$i].FSChineseRevivalist -= 1>>
-			<</if>>
-		<</if>>
-	<</for>>
+	<<= _passive.output("FSChineseRevivalist")>>
 	<<if $arcologies[$i].direction != 0>>
 		<<if $arcologies[$i].FSChineseRevivalist >= $FSLockinLevel>>
 			<<if ($arcologies[$i].name.indexOf("Arcology") != -1) && (random(0,2) == 0)>>
@@ -2356,7 +1753,7 @@ has an estimated GSP of @@.yellowgreen;<<print cashFormat(_prosperity)>><<if $sh
 	'' $arcologies[$j].name'''s culture is beginning to influence $arcologies[$i].name's $desc[0].
 <</if>>
 
-<<if _appliedInfluenceBonus < 0>>
+<<if _appliedInfluenceBonus > 0>>
 	<<if _appliedInfluenceBonus < 5>>
 		$arcologies[$j].name is societally advanced, giving it extra influence.
 	<<else>>
@@ -2364,7 +1761,7 @@ has an estimated GSP of @@.yellowgreen;<<print cashFormat(_prosperity)>><<if $sh
 	<</if>>
 <</if>>
 <<if $arcologies[$i].ownership >= 100>>
-	<<if _appliedInfluenceBonus < 0>>However, <</if>>$arcologies[$i].name is under completely unified control, making it resistant to change.
+	<<if _appliedInfluenceBonus > 0>>However, <</if>>$arcologies[$i].name is under completely unified control, making it resistant to change.
 <</if>>
 
 <<if $arcologies[$j].direction != 0>>
@@ -2381,419 +1778,11 @@ has an estimated GSP of @@.yellowgreen;<<print cashFormat(_prosperity)>><<if $sh
 <</if>>
 <</for>> /* CLOSES INFLUENCE RECEPTION */
 
-/* INFLUENCE INITIATION */
-
 <<if $arcologies[$i].direction != 0>>
-<<if $arcologies[$i].influenceTarget == -1>>
-
-<<set _influential = 0>> /* CHECK IF INFLUENTIAL */
-<<if $arcologies[$i].FSSubjugationist > 60>>
-	<<set _influential = 1>>
-<</if>>
-<<if $arcologies[$i].FSSupremacist > 60>>
-	<<set _influential = 1>>
-<</if>>
-<<if $arcologies[$i].FSRepopulationFocus > 60>>
-	<<set _influential = 1>>
-<<elseif $arcologies[$i].FSRestart > 60>>
-	<<set _influential = 1>>
-<</if>>
-<<if $arcologies[$i].FSGenderRadicalist > 60>>
-	<<set _influential = 1>>
-<<elseif $arcologies[$i].FSGenderFundamentalist > 60>>
-	<<set _influential = 1>>
-<</if>>
-<<if $arcologies[$i].FSPaternalist > 60>>
-	<<set _influential = 1>>
-<<elseif $arcologies[$i].FSDegradationist > 60>>
-	<<set _influential = 1>>
-<</if>>
-<<if $arcologies[$i].FSIntellectualDependency > 60>>
-	<<set _influential = 1>>
-<<elseif $arcologies[$i].FSSlaveProfessionalism > 60>>
-	<<set _influential = 1>>
-<</if>>
-<<if $arcologies[$i].FSBodyPurist > 60>>
-	<<set _influential = 1>>
-<<elseif $arcologies[$i].FSTransformationFetishist > 60>>
-	<<set _influential = 1>>
-<</if>>
-<<if $arcologies[$i].FSYouthPreferentialist > 60>>
-	<<set _influential = 1>>
-<<elseif $arcologies[$i].FSMaturityPreferentialist > 60>>
-	<<set _influential = 1>>
-<</if>>
-<<if $arcologies[$i].FSPetiteAdmiration > 60>>
-	<<set _influential = 1>>
-<<elseif $arcologies[$i].FSStatuesqueGlorification > 60>>
-	<<set _influential = 1>>
-<</if>>
-<<if $arcologies[$i].FSSlimnessEnthusiast > 60>>
-	<<set _influential = 1>>
-<<elseif $arcologies[$i].FSAssetExpansionist > 60>>
-	<<set _influential = 1>>
-<</if>>
-<<if $arcologies[$i].FSPastoralist > 60>>
-	<<set _influential = 1>>
-<<elseif $arcologies[$i].FSCummunism > 60>>
-	<<set _influential = 1>>
-<</if>>
-<<if $arcologies[$i].FSPhysicalIdealist > 60>>
-	<<set _influential = 1>>
-<<elseif $arcologies[$i].FSHedonisticDecadence > 60>>
-	<<set _influential = 1>>
-<</if>>
-<<if $arcologies[$i].FSIncestFetishist > 60>>
-	<<set _influential = 1>>
-<</if>>
-<<if $arcologies[$i].FSChattelReligionist > 60>>
-	<<set _influential = 1>>
-<</if>>
-<<if $arcologies[$i].FSRomanRevivalist > 60>>
-	<<set _influential = 1>>
-<<elseif $arcologies[$i].FSAztecRevivalist > 60>>
-	<<set _influential = 1>>
-<<elseif $arcologies[$i].FSEgyptianRevivalist > 60>>
-	<<set _influential = 1>>
-<<elseif $arcologies[$i].FSEdoRevivalist > 60>>
-	<<set _influential = 1>>
-<<elseif $arcologies[$i].FSArabianRevivalist > 60>>
-	<<set _influential = 1>>
-<<elseif $arcologies[$i].FSChineseRevivalist > 60>>
-	<<set _influential = 1>>
-<</if>>
-
-<<if _influential == 1>> /* SELECT AN ARCOLOGY TO INFLUENCE */
-
-<<set _eligibleTargets = []>>
-<<for $j = 0; $j < $arcologies.length; $j++>>
-<<if $arcologies[$j].direction != $arcologies[$i].direction>>
-<<if ($arcologies[$i].government != "your trustees" && $arcologies[$i].government != "your agent") || ($arcologies[$j].direction != 0)>>
-
-<<if $arcologies[$i].FSSubjugationist != "unset">>
-	<<if $arcologies[$j].FSSubjugationist != "unset">>
-		<<if $arcologies[$j].FSSubjugationistRace == $arcologies[$i].FSSubjugationistRace>>
-			<<if $arcologies[$j].FSSubjugationist < $FSLockinLevel>>
-				<<set _eligibleTargets.push($arcologies[$j].direction)>>
-			<</if>>
-		<<else>>
-			<<set _eligibleTargets.push($arcologies[$j].direction)>>
-		<</if>>
-	<<elseif $arcologies[$j].FSSupremacist != "unset">>
-		<<if $arcologies[$j].FSSupremacistRace == $arcologies[$i].FSSubjugationistRace>>
-			<<set _eligibleTargets.push($arcologies[$j].direction)>>
-		<</if>>
-	<</if>>
-<</if>>
-<<if $arcologies[$i].FSSupremacist != "unset">>
-	<<if $arcologies[$j].FSSupremacist != "unset">>
-		<<if $arcologies[$j].FSSupremacistRace == $arcologies[$i].FSSupremacistRace>>
-			<<if $arcologies[$j].FSSupremacist < $FSLockinLevel>>
-				<<set _eligibleTargets.push($arcologies[$j].direction)>>
-			<</if>>
-		<<else>>
-			<<set _eligibleTargets.push($arcologies[$j].direction)>>
-		<</if>>
-	<<elseif $arcologies[$j].FSSubjugationist != "unset">>
-		<<if $arcologies[$j].FSSubjugationistRace == $arcologies[$i].FSSupremacistRace>>
-			<<set _eligibleTargets.push($arcologies[$j].direction)>>
-		<</if>>
-	<</if>>
-<</if>>
-<<if $arcologies[$i].FSRepopulationFocus != "unset">>
-	<<if $arcologies[$j].FSRepopulationFocus != "unset">>
-		<<if $arcologies[$j].FSRepopulationFocus < $FSLockinLevel>>
-			<<set _eligibleTargets.push($arcologies[$j].direction)>>
-		<</if>>
-	<<elseif $arcologies[$j].FSRestart != "unset">>
-		<<set _eligibleTargets.push($arcologies[$j].direction)>>
-	<</if>>
-<<elseif $arcologies[$i].FSRestart != "unset">>
-	<<if $arcologies[$j].FSRestart != "unset">>
-		<<if $arcologies[$j].FSRestart < $FSLockinLevel>>
-			<<set _eligibleTargets.push($arcologies[$j].direction)>>
-		<</if>>
-	<<elseif $arcologies[$j].FSRepopulationFocus != "unset">>
-		<<set _eligibleTargets.push($arcologies[$j].direction)>>
+	<<if $arcologies[$i].influenceTarget == -1>>
+		<<run ArcologyDiplomacy.selectInfluenceTarget($i)>>
 	<</if>>
 <</if>>
-<<if $arcologies[$i].FSGenderRadicalist != "unset">>
-	<<if $arcologies[$j].FSGenderRadicalist != "unset">>
-		<<if $arcologies[$j].FSGenderRadicalist < $FSLockinLevel>>
-			<<set _eligibleTargets.push($arcologies[$j].direction)>>
-		<</if>>
-	<<elseif $arcologies[$j].FSGenderFundamentalist != "unset">>
-		<<set _eligibleTargets.push($arcologies[$j].direction)>>
-	<</if>>
-<<elseif $arcologies[$i].FSGenderFundamentalist != "unset">>
-	<<if $arcologies[$j].FSGenderFundamentalist != "unset">>
-		<<if $arcologies[$j].FSGenderFundamentalist < $FSLockinLevel>>
-			<<set _eligibleTargets.push($arcologies[$j].direction)>>
-		<</if>>
-	<<elseif $arcologies[$j].FSGenderRadicalist != "unset">>
-		<<set _eligibleTargets.push($arcologies[$j].direction)>>
-	<</if>>
-<</if>>
-<<if $arcologies[$i].FSPaternalist != "unset">>
-	<<if $arcologies[$j].FSPaternalist != "unset">>
-		<<if $arcologies[$j].FSPaternalist < $FSLockinLevel>>
-			<<set _eligibleTargets.push($arcologies[$j].direction)>>
-		<</if>>
-	<<elseif $arcologies[$j].FSDegradationist != "unset">>
-		<<set _eligibleTargets.push($arcologies[$j].direction)>>
-	<</if>>
-<<elseif $arcologies[$i].FSDegradationist != "unset">>
-	<<if $arcologies[$j].FSDegradationist != "unset">>
-		<<if $arcologies[$j].FSDegradationist < $FSLockinLevel>>
-			<<set _eligibleTargets.push($arcologies[$j].direction)>>
-		<</if>>
-	<<elseif $arcologies[$j].FSPaternalist != "unset">>
-		<<set _eligibleTargets.push($arcologies[$j].direction)>>
-	<</if>>
-<</if>>
-<<if $arcologies[$i].FSIntellectualDependency != "unset">>
-	<<if $arcologies[$j].FSIntellectualDependency != "unset">>
-		<<if $arcologies[$j].FSIntellectualDependency < $FSLockinLevel>>
-			<<set _eligibleTargets.push($arcologies[$j].direction)>>
-		<</if>>
-	<<elseif $arcologies[$j].FSSlaveProfessionalism != "unset">>
-		<<set _eligibleTargets.push($arcologies[$j].direction)>>
-	<</if>>
-<<elseif $arcologies[$i].FSSlaveProfessionalism != "unset">>
-	<<if $arcologies[$j].FSSlaveProfessionalism != "unset">>
-		<<if $arcologies[$j].FSSlaveProfessionalism < $FSLockinLevel>>
-			<<set _eligibleTargets.push($arcologies[$j].direction)>>
-		<</if>>
-	<<elseif $arcologies[$j].FSIntellectualDependency != "unset">>
-		<<set _eligibleTargets.push($arcologies[$j].direction)>>
-	<</if>>
-<</if>>
-<<if $arcologies[$i].FSBodyPurist != "unset">>
-	<<if $arcologies[$j].FSBodyPurist != "unset">>
-		<<if $arcologies[$j].FSBodyPurist < $FSLockinLevel>>
-			<<set _eligibleTargets.push($arcologies[$j].direction)>>
-		<</if>>
-	<<elseif $arcologies[$j].FSTransformationFetishist != "unset">>
-		<<set _eligibleTargets.push($arcologies[$j].direction)>>
-	<</if>>
-<<elseif $arcologies[$i].FSTransformationFetishist != "unset">>
-	<<if $arcologies[$j].FSTransformationFetishist != "unset">>
-		<<if $arcologies[$j].FSTransformationFetishist < $FSLockinLevel>>
-			<<set _eligibleTargets.push($arcologies[$j].direction)>>
-		<</if>>
-	<<elseif $arcologies[$j].FSBodyPurist != "unset">>
-		<<set _eligibleTargets.push($arcologies[$j].direction)>>
-	<</if>>
-<</if>>
-<<if $arcologies[$i].FSYouthPreferentialist != "unset">>
-	<<if $arcologies[$j].FSYouthPreferentialist != "unset">>
-		<<if $arcologies[$j].FSYouthPreferentialist < $FSLockinLevel>>
-			<<set _eligibleTargets.push($arcologies[$j].direction)>>
-		<</if>>
-	<<elseif $arcologies[$j].FSMaturityPreferentialist != "unset">>
-		<<set _eligibleTargets.push($arcologies[$j].direction)>>
-	<</if>>
-<<elseif $arcologies[$i].FSMaturityPreferentialist != "unset">>
-	<<if $arcologies[$j].FSMaturityPreferentialist != "unset">>
-		<<if $arcologies[$j].FSMaturityPreferentialist < $FSLockinLevel>>
-			<<set _eligibleTargets.push($arcologies[$j].direction)>>
-		<</if>>
-	<<elseif $arcologies[$j].FSYouthPreferentialist != "unset">>
-		<<set _eligibleTargets.push($arcologies[$j].direction)>>
-	<</if>>
-<</if>>
-<<if $arcologies[$i].FSPetiteAdmiration != "unset">>
-	<<if $arcologies[$j].FSPetiteAdmiration != "unset">>
-		<<if $arcologies[$j].FSPetiteAdmiration < $FSLockinLevel>>
-			<<set _eligibleTargets.push($arcologies[$j].direction)>>
-		<</if>>
-	<<elseif $arcologies[$j].FSStatuesqueGlorification != "unset">>
-		<<set _eligibleTargets.push($arcologies[$j].direction)>>
-	<</if>>
-<<elseif $arcologies[$i].FSStatuesqueGlorification != "unset">>
-	<<if $arcologies[$j].FSStatuesqueGlorification != "unset">>
-		<<if $arcologies[$j].FSStatuesqueGlorification < $FSLockinLevel>>
-			<<set _eligibleTargets.push($arcologies[$j].direction)>>
-		<</if>>
-	<<elseif $arcologies[$j].FSPetiteAdmiration != "unset">>
-		<<set _eligibleTargets.push($arcologies[$j].direction)>>
-	<</if>>
-<</if>>
-<<if $arcologies[$i].FSSlimnessEnthusiast != "unset">>
-	<<if $arcologies[$j].FSSlimnessEnthusiast != "unset">>
-		<<if $arcologies[$j].FSSlimnessEnthusiast < $FSLockinLevel>>
-			<<set _eligibleTargets.push($arcologies[$j].direction)>>
-		<</if>>
-	<<elseif $arcologies[$j].FSAssetExpansionist != "unset">>
-		<<set _eligibleTargets.push($arcologies[$j].direction)>>
-	<</if>>
-<<elseif $arcologies[$i].FSAssetExpansionist != "unset">>
-	<<if $arcologies[$j].FSAssetExpansionist != "unset">>
-		<<if $arcologies[$j].FSAssetExpansionist < $FSLockinLevel>>
-			<<set _eligibleTargets.push($arcologies[$j].direction)>>
-		<</if>>
-	<<elseif $arcologies[$j].FSSlimnessEnthusiast != "unset">>
-		<<set _eligibleTargets.push($arcologies[$j].direction)>>
-	<</if>>
-<</if>>
-<<if $arcologies[$i].FSPastoralist != "unset">>
-	<<if $arcologies[$j].FSPastoralist != "unset">>
-		<<if $arcologies[$j].FSPastoralist < $FSLockinLevel>>
-			<<set _eligibleTargets.push($arcologies[$j].direction)>>
-		<</if>>
-	<<elseif $arcologies[$j].FSCummunism != "unset">>
-		<<set _eligibleTargets.push($arcologies[$j].direction)>>
-	<</if>>
-<<elseif $arcologies[$i].FSCummunism != "unset">>
-	<<if $arcologies[$j].FSCummunism != "unset">>
-		<<if $arcologies[$j].FSCummunism < $FSLockinLevel>>
-			<<set _eligibleTargets.push($arcologies[$j].direction)>>
-		<</if>>
-	<<elseif $arcologies[$j].FSPastoralist != "unset">>
-		<<set _eligibleTargets.push($arcologies[$j].direction)>>
-	<</if>>
-<</if>>
-<<if $arcologies[$i].FSPhysicalIdealist != "unset">>
-	<<if $arcologies[$j].FSPhysicalIdealist != "unset">>
-		<<if $arcologies[$j].FSPhysicalIdealist < $FSLockinLevel>>
-			<<set _eligibleTargets.push($arcologies[$j].direction)>>
-		<</if>>
-	<<elseif $arcologies[$j].FSHedonisticDecadence != "unset">>
-		<<set _eligibleTargets.push($arcologies[$j].direction)>>
-	<</if>>
-<<elseif $arcologies[$i].FSHedonisticDecadence != "unset">>
-	<<if $arcologies[$j].FSHedonisticDecadence != "unset">>
-		<<if $arcologies[$j].FSHedonisticDecadence < $FSLockinLevel>>
-			<<set _eligibleTargets.push($arcologies[$j].direction)>>
-		<</if>>
-	<<elseif $arcologies[$j].FSPhysicalIdealist != "unset">>
-		<<set _eligibleTargets.push($arcologies[$j].direction)>>
-	<</if>>
-<</if>>
-<<if $arcologies[$i].FSIncestFetishist != "unset">>
-	<<if $arcologies[$j].FSIncestFetishist != "unset">>
-		<<if $arcologies[$j].FSIncestFetishist < $FSLockinLevel>>
-			<<set _eligibleTargets.push($arcologies[$j].direction)>>
-		<</if>>
-	<</if>>
-<</if>>
-<<if $arcologies[$i].FSChattelReligionist != "unset">>
-	<<if $arcologies[$j].FSChattelReligionist != "unset">>
-		<<if $arcologies[$j].FSChattelReligionist < $FSLockinLevel>>
-			<<set _eligibleTargets.push($arcologies[$j].direction)>>
-		<</if>>
-	<</if>>
-<</if>>
-<<if $arcologies[$i].FSRomanRevivalist != "unset">>
-	<<if $arcologies[$j].FSRomanRevivalist != "unset">>
-		<<if $arcologies[$j].FSRomanRevivalist < $FSLockinLevel>>
-			<<set _eligibleTargets.push($arcologies[$j].direction)>>
-		<</if>>
-	<<elseif $arcologies[$j].FSAztecRevivalist != "unset">>
-		<<set _eligibleTargets.push($arcologies[$j].direction)>>
-	<<elseif $arcologies[$j].FSEgyptianRevivalist != "unset">>
-		<<set _eligibleTargets.push($arcologies[$j].direction)>>
-	<<elseif $arcologies[$j].FSEdoRevivalist != "unset">>
-		<<set _eligibleTargets.push($arcologies[$j].direction)>>
-	<<elseif $arcologies[$j].FSArabianRevivalist != "unset">>
-		<<set _eligibleTargets.push($arcologies[$j].direction)>>
-	<<elseif $arcologies[$j].FSChineseRevivalist != "unset">>
-		<<set _eligibleTargets.push($arcologies[$j].direction)>>
-	<</if>>
-<<elseif $arcologies[$i].FSAztecRevivalist != "unset">>
-	<<if $arcologies[$j].FSAztecRevivalist != "unset">>
-		<<if $arcologies[$j].FSAztecRevivalist < $FSLockinLevel>>
-			<<set _eligibleTargets.push($arcologies[$j].direction)>>
-		<</if>>
-	<<elseif $arcologies[$j].FSRomanRevivalist != "unset">>
-		<<set _eligibleTargets.push($arcologies[$j].direction)>>
-	<<elseif $arcologies[$j].FSEgyptianRevivalist != "unset">>
-		<<set _eligibleTargets.push($arcologies[$j].direction)>>
-	<<elseif $arcologies[$j].FSEdoRevivalist != "unset">>
-		<<set _eligibleTargets.push($arcologies[$j].direction)>>
-	<<elseif $arcologies[$j].FSArabianRevivalist != "unset">>
-		<<set _eligibleTargets.push($arcologies[$j].direction)>>
-	<<elseif $arcologies[$j].FSChineseRevivalist != "unset">>
-		<<set _eligibleTargets.push($arcologies[$j].direction)>>
-	<</if>>
-<<elseif $arcologies[$i].FSEgyptianRevivalist != "unset">>
-	<<if $arcologies[$j].FSEgyptianRevivalist != "unset">>
-		<<if $arcologies[$j].FSEgyptianRevivalist < $FSLockinLevel>>
-			<<set _eligibleTargets.push($arcologies[$j].direction)>>
-		<</if>>
-	<<elseif $arcologies[$j].FSRomanRevivalist != "unset">>
-		<<set _eligibleTargets.push($arcologies[$j].direction)>>
-	<<elseif $arcologies[$j].FSAztecRevivalist != "unset">>
-		<<set _eligibleTargets.push($arcologies[$j].direction)>>
-	<<elseif $arcologies[$j].FSEdoRevivalist != "unset">>
-		<<set _eligibleTargets.push($arcologies[$j].direction)>>
-	<<elseif $arcologies[$j].FSArabianRevivalist != "unset">>
-		<<set _eligibleTargets.push($arcologies[$j].direction)>>
-	<<elseif $arcologies[$j].FSChineseRevivalist != "unset">>
-		<<set _eligibleTargets.push($arcologies[$j].direction)>>
-	<</if>>
-<<elseif $arcologies[$i].FSEdoRevivalist != "unset">>
-	<<if $arcologies[$j].FSEdoRevivalist != "unset">>
-		<<if $arcologies[$j].FSEdoRevivalist < $FSLockinLevel>>
-			<<set _eligibleTargets.push($arcologies[$j].direction)>>
-		<</if>>
-	<<elseif $arcologies[$j].FSEgyptianRevivalist != "unset">>
-		<<set _eligibleTargets.push($arcologies[$j].direction)>>
-	<<elseif $arcologies[$j].FSRomanRevivalist != "unset">>
-		<<set _eligibleTargets.push($arcologies[$j].direction)>>
-	<<elseif $arcologies[$j].FSAztecRevivalist != "unset">>
-		<<set _eligibleTargets.push($arcologies[$j].direction)>>
-	<<elseif $arcologies[$j].FSArabianRevivalist != "unset">>
-		<<set _eligibleTargets.push($arcologies[$j].direction)>>
-	<<elseif $arcologies[$j].FSChineseRevivalist != "unset">>
-		<<set _eligibleTargets.push($arcologies[$j].direction)>>
-	<</if>>
-<<elseif $arcologies[$i].FSArabianRevivalist != "unset">>
-	<<if $arcologies[$j].FSArabianRevivalist != "unset">>
-		<<if $arcologies[$j].FSArabianRevivalist < $FSLockinLevel>>
-			<<set _eligibleTargets.push($arcologies[$j].direction)>>
-		<</if>>
-	<<elseif $arcologies[$j].FSEgyptianRevivalist != "unset">>
-		<<set _eligibleTargets.push($arcologies[$j].direction)>>
-	<<elseif $arcologies[$j].FSEdoRevivalist != "unset">>
-		<<set _eligibleTargets.push($arcologies[$j].direction)>>
-	<<elseif $arcologies[$j].FSRomanRevivalist != "unset">>
-		<<set _eligibleTargets.push($arcologies[$j].direction)>>
-	<<elseif $arcologies[$j].FSAztecRevivalist != "unset">>
-		<<set _eligibleTargets.push($arcologies[$j].direction)>>
-	<<elseif $arcologies[$j].FSChineseRevivalist != "unset">>
-		<<set _eligibleTargets.push($arcologies[$j].direction)>>
-	<</if>>
-<<elseif $arcologies[$i].FSChineseRevivalist != "unset">>
-	<<if $arcologies[$j].FSChineseRevivalist != "unset">>
-		<<if $arcologies[$j].FSChineseRevivalist < $FSLockinLevel>>
-			<<set _eligibleTargets.push($arcologies[$j].direction)>>
-		<</if>>
-	<<elseif $arcologies[$j].FSEgyptianRevivalist != "unset">>
-		<<set _eligibleTargets.push($arcologies[$j].direction)>>
-	<<elseif $arcologies[$j].FSEdoRevivalist != "unset">>
-		<<set _eligibleTargets.push($arcologies[$j].direction)>>
-	<<elseif $arcologies[$j].FSArabianRevivalist != "unset">>
-		<<set _eligibleTargets.push($arcologies[$j].direction)>>
-	<<elseif $arcologies[$j].FSRomanRevivalist != "unset">>
-		<<set _eligibleTargets.push($arcologies[$j].direction)>>
-	<<elseif $arcologies[$j].FSAztecRevivalist != "unset">>
-		<<set _eligibleTargets.push($arcologies[$j].direction)>>
-	<</if>>
-<</if>>
-
-<</if>>
-<</if>>
-<</for>>
-
-<<if _eligibleTargets.length > 0>>
-	<<set $arcologies[$i].influenceTarget = _eligibleTargets.random()>>
-<</if>>
-
-<</if>> /* CLOSES SELECT AN ARCOLOGY TO INFLUENCE */
-
-<</if>>
-<</if>> /* CLOSES INFLUENCE INITIATION */
 
 <<if $arcologies[$i].direction != 0>>
 	<<set $arcologies[$i].prosperity = Math.clamp($arcologies[$i].prosperity, 1, 300)>>
diff --git a/src/uncategorized/neighborsFSAdoption.tw b/src/uncategorized/neighborsFSAdoption.tw
index e41634247d5b836d190cbaf07bd1949513222d2b..b044c7c478eac4cdf90486a6556225abfe662720 100644
--- a/src/uncategorized/neighborsFSAdoption.tw
+++ b/src/uncategorized/neighborsFSAdoption.tw
@@ -871,7 +871,7 @@ societal development.
 			<<set _influenceBonus = 20>>
 		<</if>>
 
-		<<set _opinion = arcologyOpinion($arcologies[$i], $arcologies[$j])>>
+		<<set _opinion = ArcologyDiplomacy.opinion($i, $j)>>
 		<<if _opinion >= 50>>
 			$arcologies[$i].name is aligned with $arcologies[$j].name socially, encouraging it to consider adopting all its cultural values.
 			<<set _influenceBonus += _opinion-50>>
diff --git a/src/uncategorized/slaveMarkets.tw b/src/uncategorized/slaveMarkets.tw
index 466f2166460263ff3e3fc8cab1615732ca45e502..070a4756e2f9d0c05ab9e7c037e7528d400f61ad 100644
--- a/src/uncategorized/slaveMarkets.tw
+++ b/src/uncategorized/slaveMarkets.tw
@@ -139,7 +139,7 @@ You visit the slave markets off the arcology plaza. It's always preferable to ex
 
 <<case "neighbor">>
 	You're in the area of the slave market that specializes in slaves from within the Free City, viewing slaves from ''<<print "$arcologies[$numArcology].name">>''. Some were trained there, specifically for sale, while others are simply being sold.
-	<<set _opinion = arcologyOpinion($arcologies[0], $arcologies[$numArcology])>>
+	<<set _opinion = ArcologyDiplomacy.opinion(0, $numArcology)>>
 	<<if _opinion != 0>>
 		<<set _slaveCost -= Math.trunc(_slaveCost*_opinion*0.05)>>
 		<<if _opinion > 2>>