diff --git a/js/003-data/policiesData.js b/js/003-data/policiesData.js
index 1d7b85d2e4a60f7e8997c0c1b57cf7b0e4fc81aa..f7fd660f52f7d466106f73e2cb2bad69c1200eab 100644
--- a/js/003-data/policiesData.js
+++ b/js/003-data/policiesData.js
@@ -743,7 +743,7 @@ App.Data.Policies.Selection = {
 									const age = Math.clamp(v, 20, 120);
 									V.customRetirementAge = age;
 									V.retirementAge = age;
-									policy("RetirementPolicies");
+									App.UI.reload();
 								},
 								true
 							),
@@ -773,7 +773,7 @@ App.Data.Policies.Selection = {
 									const age = Math.clamp(v, 20, 120);
 									V.customRetirementAge = age;
 									V.retirementAge = age;
-									policy("RetirementPolicies");
+									App.UI.reload();
 								},
 								true
 							),
@@ -842,7 +842,7 @@ App.Data.Policies.Selection = {
 								V.policies.retirement.sex,
 								v => {
 									V.policies.retirement.sex = Math.clamp(v, 1, 1e7);
-									policy("RetirementPolicies");
+									App.UI.reload();
 								},
 								true
 							),
@@ -872,7 +872,7 @@ App.Data.Policies.Selection = {
 								V.policies.retirement.milk,
 								v => {
 									V.policies.retirement.milk = Math.clamp(v, 1, 1e8);
-									policy("RetirementPolicies");
+									App.UI.reload();
 								},
 								true
 							),
@@ -902,7 +902,7 @@ App.Data.Policies.Selection = {
 								V.policies.retirement.cum,
 								v => {
 									V.policies.retirement.cum = Math.clamp(v, 1, 1e9);
-									policy("RetirementPolicies");
+									App.UI.reload();
 								},
 								true
 							),
@@ -932,7 +932,7 @@ App.Data.Policies.Selection = {
 								V.policies.retirement.births,
 								v => {
 									V.policies.retirement.births = Math.clamp(v, 1, 1e6);
-									policy("RetirementPolicies");
+									App.UI.reload();
 								},
 								true
 							),
@@ -962,7 +962,7 @@ App.Data.Policies.Selection = {
 								V.policies.retirement.kills,
 								v => {
 									V.policies.retirement.kills = Math.clamp(v, 1, 1e6);
-									policy("RetirementPolicies");
+									App.UI.reload();
 								},
 								true
 							),
@@ -1013,7 +1013,7 @@ App.Data.Policies.Selection = {
 									if (V.customMenialRetirementAge < 45) {
 										V.retirementAge = V.customMenialRetirementAge;
 									}
-									policy("MenialRetirementPolicies");
+									App.UI.reload();
 								},
 								true
 							),
@@ -1102,6 +1102,7 @@ App.Data.Policies.Selection = {
 				titleClass: "lime",
 				text: "you will do your best to remind society that a woman does not need an education to serve her man.",
 				activatedText: "women do not need to be educated to serve their role in society.",
+				get requirements() { return (V.arcologies[0].FSGenderFundamentalist >= 60); },
 			}
 		],
 		"arcologies[0].FSGenderFundamentalistSMR": [
@@ -1138,7 +1139,14 @@ App.Data.Policies.Selection = {
 				text: "you will encourage veneration of slaves with both dicks and pussies.",
 				activatedText: "you are encouraging Gender Radicalism towards veneration of slaves with both dicks and pussies.",
 				enable: 1,
-				get requirements() { return (V.seeDicks !== 0 && V.seeDicks !== 100); },
+				get requirements() {
+					return (
+						V.seeDicks !== 0 &&
+						V.seeDicks !== 100 &&
+						V.arcologies[0].FSGenderRadicalist > 60 &&
+						V.arcologies[0].FSGenderRadicalistLawFuta === 0
+					);
+				},
 				note: `Will affect citizens' appreciation of futas`
 			},
 			{
@@ -1147,7 +1155,13 @@ App.Data.Policies.Selection = {
 				text: "you will encourage an appreciation for stiff dicks and swinging balls.",
 				activatedText: "you are encouraging Gender Radicalism towards an appreciation for stiff dicks and swinging balls.",
 				enable: 2,
-				get requirements() { return (V.seeDicks !== 0); },
+				get requirements() {
+					return (
+						V.seeDicks !== 0 &&
+						V.arcologies[0].FSGenderRadicalist > 60 &&
+						V.arcologies[0].FSGenderRadicalistLawFuta === 0
+					);
+				},
 				note: `Will affect slaves' attractiveness to citizens`
 			},
 			{
@@ -1156,6 +1170,14 @@ App.Data.Policies.Selection = {
 				text: "you will encourage an appreciation for broad hips, plush asses, big buttholes, and skilled sphincters.",
 				activatedText: "you are encouraging an appreciation for broad hips, plush asses, big buttholes, and skilled sphincters.",
 				enable: 3,
+				get requirements() {
+					return (
+						V.seeDicks !== 0 &&
+						V.arcologies[0].FSGenderRadicalist > 60 &&
+						V.arcologies[0].FSSlimnessEnthusiastLaw === 0 &&
+						V.arcologies[0].FSGenderRadicalistLawFuta === 0
+					);
+				},
 				note: `Will affect slaves' attractiveness to citizens`
 			},
 			{
@@ -1164,7 +1186,14 @@ App.Data.Policies.Selection = {
 				text: "you will encourage an appreciation for cute, flat chested slaves with small male genitals and no vagina.",
 				activatedText: "you are encouraging an appreciation for cute, flat chested slaves with small male genitals and no vagina.",
 				enable: 4,
-				get requirements() { return (V.seeDicks !== 0); },
+				get requirements() {
+					return (
+						V.seeDicks !== 0 &&
+						V.arcologies[0].FSGenderRadicalist > 60 &&
+						V.arcologies[0].FSHedonisticDecadenceLaw2 === 0 &&
+						V.arcologies[0].FSGenderRadicalistLawFuta === 0
+					);
+				},
 				note: `Will affect slaves' attractiveness to citizens`
 			},
 		],
diff --git a/src/interaction/policies/policies.js b/src/interaction/policies/policies.js
index 7882510d04f6f585442852aab593cf5c75b49d74..7f82c9cc99e47d5a2e409b54d19cc87ff0c51b03 100644
--- a/src/interaction/policies/policies.js
+++ b/src/interaction/policies/policies.js
@@ -22,221 +22,186 @@ globalThis.policies = (function() {
 })();
 /**
  * @param {string} category
- * @returns {DocumentFragment}
+ * @returns {Array}
  */
 globalThis.policy = function(category) {
-	const frag = new DocumentFragment;
+	const policyArray = [];
 	for (let policyVariable in App.Data.Policies.Selection[category]) {
-		frag.append(policyElement(policyVariable));
+		policyElement(policyVariable);
 	}
-	return frag;
-	/**
-	 * @param {string} policyVariable
-	 * @returns {Node} el
-	 */
-	function policyElement(policyVariable) {
-		const container = document.createElement("div");
-		container.append(fillContainer());
-		return container;
-		/**
-		 * @returns {HTMLElement} el
-		 */
-		function fillContainer() {
-			let el = document.createElement("p");
-			let div;
-			let span;
-			const policyValue = _.get(V, policyVariable);
-			/** @type {PolicySelector[]} */
-			const policyObject = App.Data.Policies.Selection[category][policyVariable];
-			if (policyValue === 0) {
-				// apply
-				for (let i = 0; i < policyObject.length; i++) {
-					const p = policyObject[i];
-					const enable = p.enable || 1;
-					if (p.hasOwnProperty("requirements") && p.requirements === false) {
-						continue;
-					}
-					div = document.createElement("div");
-					span = document.createElement("span");
+	return policyArray;
 
-					// title
-					span.style.fontWeight = "bold";
-					if (p.hasOwnProperty("titleClass")) {
-						span.classList.add(p.titleClass);
-					}
-					span.append(p.title);
-					div.append(span);
-					div.append(`: `);
-
-					// Description text
-					div.append(p.text);
-					div.append(` `);
-
-					// link
-					if (!(p.hasOwnProperty("hide") && p.hide.button === 1)) {
-						if (p.hasOwnProperty("requirements")) {
-							if (p.requirements === true) {
-								div.append(implement(p, enable));
-							} else {
-								const link = App.UI.DOM.disabledLink("Implement", [`You do not meet the requirements, or passed a conflicting policy already`]);
-								link.style.color = "white";
-								div.append(link);
-							}
-						} else {
-							div.append(implement(p, enable));
-						}
-					}
-					el.append(div);
-				}
-			} else if (typeof policyValue === "string" || typeof policyValue === "number") {
-				// repeal
-				let i = 0;
-				for (const pol in policyObject) {
-					if (policyObject[pol].hasOwnProperty("enable") && policyObject[pol].enable === policyValue) {
-						i = pol;
-						break;
-					}
-				}
+	/** @param {string} policyVariable */
+	function policyElement(policyVariable) {
+		const policyValue = _.get(V, policyVariable);
+		/** @type {PolicySelector[]} */
+		const policyObject = App.Data.Policies.Selection[category][policyVariable];
+		if (policyValue === 0) {
+			// apply
+			for (let i = 0; i < policyObject.length; i++) {
+				const el = document.createElement("p");
 				const p = policyObject[i];
-				if (p.hasOwnProperty("hide")) {
-					if (p.hide.ifActivated === 1) {
-						return el;
-					}
-				}
-
-				let title;
-				if (p.hasOwnProperty("activatedTitle")) {
-					title = p.activatedTitle;
-				} else {
-					title = p.title;
+				const enable = p.enable || 1;
+				if (p.hasOwnProperty("requirements") && p.requirements === false) {
+					continue;
 				}
-				let text;
-				if (p.hasOwnProperty("activatedText")) {
-					text = p.activatedText;
-				} else {
-					text = p.text;
-				}
-				div = document.createElement("div");
-				span = document.createElement("span");
 
 				// title
-				span.style.fontWeight = "bold";
-				span.append(title);
-				div.append(span);
-				div.append(`: `);
+				const classArray = ["bold"];
+				if (p.hasOwnProperty("titleClass")) {
+					classArray.push(p.titleClass);
+				}
+				App.UI.DOM.appendNewElement("span", el, `${p.title}: `, classArray);
 
 				// Description text
-				div.append(text);
-				div.append(` `);
+				App.UI.DOM.appendNewElement("span", el, `${p.text} `);
 
 				// link
-				div.append(repeal(p));
-				el.append(div);
-			} else {
-				throw `V.${policyVariable} not initialized properly, "${policyValue}"`;
-			}
-
-			return el;
-
-			/**
-			 * @param {PolicySelector} p The data object that describes the policy being considered.
-			 * @returns {Node} Link to repeal.
-			 */
-			function repeal(p) {
-				const frag = new DocumentFragment;
-				let check = canAfford();
-				let link;
 				if (!(p.hasOwnProperty("hide") && p.hide.button === 1)) {
-					if (check === true) {
-						link = App.UI.DOM.link(
-							"Repeal",
-							() => {
-								if (V.rep >= 1000) {
-									_.set(V, policyVariable, 0);
-									applyCost();
-									if (p.hasOwnProperty("onRepeal")) {
-										p.onRepeal();
-									}
-								}
-								jQuery(container).empty().append(fillContainer(policyVariable));
-							}
-						);
-						link.style.color = "yellow";
+					if (p.hasOwnProperty("requirements")) {
+						if (p.requirements === true) {
+							el.append(implement(p, enable));
+						} else {
+							const link = App.UI.DOM.disabledLink("Implement", [`You do not meet the requirements, or passed a conflicting policy already`]);
+							link.style.color = "white";
+							el.append(link);
+						}
 					} else {
-						link = App.UI.DOM.disabledLink("Repeal", [`You do not have enough ${check}`]);
-						link.style.color = "red";
+						el.append(implement(p, enable));
 					}
-					frag.append(link);
 				}
-
-				if (p.hasOwnProperty("activatedNote")) {
-					frag.append(App.UI.DOM.makeElement("div", p.activatedNote, ["note", "indent"]));
+				policyArray.push(el);
+			}
+		} else if (typeof policyValue === "string" || typeof policyValue === "number") {
+			const el = document.createElement("p");
+			// repeal
+			let i = 0;
+			for (const pol in policyObject) {
+				if (policyObject[pol].hasOwnProperty("enable") && policyObject[pol].enable === policyValue) {
+					i = pol;
+					break;
+				}
+			}
+			const p = policyObject[i];
+			if (p.hasOwnProperty("hide")) {
+				if (p.hide.ifActivated === 1) {
+					return;
 				}
-				return frag;
 			}
-			/**
-			 * @param {PolicySelector} p The data object that describes the policy being considered.
-			 * @param {number|string} enable value to set the policy to in order to switch it on.
-			 * @returns {Node} Link to implement.
-			 */
-			function implement(p, enable) {
-				let check = canAfford();
-				const frag = new DocumentFragment;
-				const linkArray = [];
-				let link;
+
+			// title
+			const title = (p.hasOwnProperty("activatedTitle")) ? p.activatedTitle : p.title;
+			App.UI.DOM.appendNewElement("span", el, `${title}: `, "bold");
+
+			// Description text
+			const text = (p.hasOwnProperty("activatedText")) ? p.activatedText : p.text;
+			App.UI.DOM.appendNewElement("span", el, `${text} `);
+
+			// link
+			el.append(repeal(p));
+			policyArray.push(el);
+		} else {
+			throw `V.${policyVariable} not initialized properly, "${policyValue}"`;
+		}
+
+		/**
+		 * @param {PolicySelector} p The data object that describes the policy being considered.
+		 * @returns {Node} Link to repeal.
+		 */
+		function repeal(p) {
+			const frag = new DocumentFragment;
+			let check = canAfford();
+			let link;
+			if (!(p.hasOwnProperty("hide") && p.hide.button === 1)) {
 				if (check === true) {
 					link = App.UI.DOM.link(
-						"Implement",
+						"Repeal",
 						() => {
 							if (V.rep >= 1000) {
-								_.set(V, policyVariable, enable);
+								_.set(V, policyVariable, 0);
 								applyCost();
-								if (p.hasOwnProperty("onImplementation")) {
-									p.onImplementation();
+								if (p.hasOwnProperty("onRepeal")) {
+									p.onRepeal();
 								}
 							}
-							App.UI.reload(); // policy(category); We need to make sure all tabs are refreshed, so this policy call is too targeted for now.
+							App.UI.reload();
 						}
 					);
-					link.style.color = "green";
+					link.style.color = "yellow";
 				} else {
-					link = App.UI.DOM.disabledLink("Implement", [`You do not have enough ${check}`]);
+					link = App.UI.DOM.disabledLink("Repeal", [`You do not have enough ${check}`]);
 					link.style.color = "red";
 				}
-				linkArray.push(link);
-				if (V.cheatMode) {
-					linkArray.push(App.UI.DOM.link(
-						"Cheat apply",
-						() => {
+				frag.append(link);
+			}
+
+			if (p.hasOwnProperty("activatedNote")) {
+				frag.append(App.UI.DOM.makeElement("div", p.activatedNote, ["note", "indent"]));
+			}
+			return frag;
+		}
+		/**
+		 * @param {PolicySelector} p The data object that describes the policy being considered.
+		 * @param {number|string} enable value to set the policy to in order to switch it on.
+		 * @returns {Node} Link to implement.
+		 */
+		function implement(p, enable) {
+			let check = canAfford();
+			const frag = new DocumentFragment;
+			const linkArray = [];
+			let link;
+			if (check === true) {
+				link = App.UI.DOM.link(
+					"Implement",
+					() => {
+						if (V.rep >= 1000) {
 							_.set(V, policyVariable, enable);
+							applyCost();
 							if (p.hasOwnProperty("onImplementation")) {
 								p.onImplementation();
 							}
-							App.UI.reload(); // policy(category); We need to make sure all tabs are refreshed, so this policy call is too targeted for now.
 						}
-					));
-				}
-				frag.append(App.UI.DOM.generateLinksStrip(linkArray));
-				if (p.hasOwnProperty("note")) {
-					frag.append(App.UI.DOM.makeElement("div", p.note, ["note", "indent"]));
-				}
-				return frag;
+						App.UI.reload();
+					}
+				);
+				link.style.color = "green";
+			} else {
+				link = App.UI.DOM.disabledLink("Implement", [`You do not have enough ${check}`]);
+				link.style.color = "red";
 			}
+			linkArray.push(link);
+			if (V.cheatMode) {
+				linkArray.push(App.UI.DOM.link(
+					"Cheat apply",
+					() => {
+						_.set(V, policyVariable, enable);
+						if (p.hasOwnProperty("onImplementation")) {
+							p.onImplementation();
+						}
+						App.UI.reload();
+					}
+				));
+			}
+			frag.append(App.UI.DOM.generateLinksStrip(linkArray));
+			if (p.hasOwnProperty("note")) {
+				frag.append(App.UI.DOM.makeElement("div", p.note, ["note", "indent"]));
+			}
+			return frag;
+		}
 
-			function canAfford() {
-				if (V.cash < 5000) {
-					return "cash";
-				} else if (V.rep < 1000 && !["EducationPolicies"].includes(category)) {
-					return "reputation";
-				}
-				return true;
+		function canAfford() {
+			if (V.cash < 5000) {
+				return "cash";
+			} else if (V.rep < 1000 && !["EducationPolicies"].includes(category)) {
+				return "reputation";
 			}
+			return true;
+		}
 
-			function applyCost() {
-				cashX(-5000, "policies");
-				if (!["EducationPolicies"].includes(category)) {
-					repX(-1000, "policies");
-				}
+		function applyCost() {
+			cashX(-5000, "policies");
+			if (!["EducationPolicies"].includes(category)) {
+				repX(-1000, "policies");
 			}
 		}
 	}
diff --git a/src/interaction/policies/policiesPassage.js b/src/interaction/policies/policiesPassage.js
index 504e161c8b5217233944643ecdbe9d7c0db7f718..a8992d3a31cf064841b3ebc06a0b0d94a6b0e9a7 100644
--- a/src/interaction/policies/policiesPassage.js
+++ b/src/interaction/policies/policiesPassage.js
@@ -27,20 +27,22 @@ App.UI.policies = function() {
 	function smr() {
 		const frag = new DocumentFragment();
 		App.UI.DOM.appendNewElement("div", frag, `Slave Market Regulations (SMRs) will affect slaves that come through the official slave markets in your arcology. The markets themselves will bear the cost of these regulations, but the minimum practicable slave prices may rise as a result.`, "scene-intro");
-		frag.append(policy("SMR"));
+		policy("SMR").forEach(p => frag.append(p));
 		return frag;
 	}
 
 	function st() {
-		return policy("SexualTrendsetting");
+		const frag = new DocumentFragment();
+		policy("SexualTrendsetting").forEach(p => frag.append(p));
+		return frag;
 	}
 
 	function population() {
 		const frag = new DocumentFragment();
 		App.UI.DOM.appendNewElement("h1", frag, `Population`);
-		frag.append(policy("PopulationPolicies"));
+		policy("PopulationPolicies").forEach(p => frag.append(p));
 		App.UI.DOM.appendNewElement("h1", frag, `Domestic`);
-		frag.append(policy("DomesticPolicies"));
+		policy("DomesticPolicies").forEach(p => frag.append(p));
 		return frag;
 	}
 
@@ -49,7 +51,7 @@ App.UI.policies = function() {
 		if (V.schoolSuggestion === 0) {
 			App.UI.DOM.appendNewElement("p", frag, `You have yet to contact a school about adding a local branch.`);
 		}
-		frag.append(policy("EducationPolicies"));
+		policy("EducationPolicies").forEach(p => frag.append(p));
 		return frag;
 	}
 
@@ -60,38 +62,19 @@ App.UI.policies = function() {
 			div.append(` in the absence of a defined slave retirement age, slaves will not remain sex slaves after reaching age ${V.retirementAge}`);
 			App.UI.DOM.appendNewElement("div", frag, `This is a current content and mechanical limitation in FC V.ver, not a universal Free Cities rule.`, ["indent", "note"]);
 		}
-		frag.append(policy("RetirementPolicies"));
+		policy("RetirementPolicies").forEach(p => frag.append(p));
 		App.UI.DOM.appendNewElement("h1", frag, `Menials`);
-		frag.append(policy("MenialRetirementPolicies"));
+		policy("MenialRetirementPolicies").forEach(p => frag.append(p));
 		return frag;
 	}
 	function fs() {
 		const frag = new DocumentFragment();
-		frag.append(policy("FutureSocietiesTab"));
+		policy("FutureSocietiesTab").forEach(p => frag.append(p));
 		for (const FS in App.Data.FutureSociety.records) {
-			const apply = () => {
+			const policies = policy(FS);
+			if (policies.length > 0) {
 				App.UI.DOM.appendNewElement("h2", frag, App.Data.FutureSociety.records[FS].adj);
-				frag.append(policy(FS));
-			};
-			if (FS === "FSGenderFundamentalist") {
-				if (V.arcologies[0].FSGenderFundamentalist > 20) {
-					apply();
-				}
-			} else if (FS === "FSGenderRadicalist") {
-				if (V.arcologies[0].FSGenderRadicalist > 20 && !(V.arcologies[0].FSGenderFundamentalist > 20)) {
-					apply();
-				}
-			} else if (FS === "FSRestart") {
-				if (V.arcologies[0][FS] > 40 || V.propOutcome !== 0) {
-					if (V.propOutcome) {
-						r.push(`<strong>Elite Breeder Eligibility:</strong> Societal Elite may use eligible slaves as breeders.`);
-					} else if (V.propOutcome === -1) {
-						r.push(`<strong>Elite Breeder Eligibility:</strong> The Societal Elite have rejected your breeding proposal.`);
-					}
-					apply();
-				}
-			} else if (V.arcologies[0][FS] > 40) {
-				apply();
+				policies.forEach(p => frag.append(p));
 			}
 		}
 		return frag;