diff --git a/src/interaction/slaveInteract.js b/src/interaction/slaveInteract.js
index 799636a324b0680d9f12e6c158f12535eb2bc305..6808ad215d49614d0dc9b05c265415f804f6ffdd 100644
--- a/src/interaction/slaveInteract.js
+++ b/src/interaction/slaveInteract.js
@@ -2287,78 +2287,25 @@ App.UI.SlaveInteract.smartSettings = function(slave) {
 App.UI.SlaveInteract.orgasm = function(slave) {
 	let el = document.createElement('div');
 
-	const masturbation = [];
-	const partner = [];
-	const family = [];
-	const slaves = [];
-	const master = [];
-
-	// Masturbation
-	masturbation.push({text: `Allow`, updateSlave: {"rules.release.masturbation": 1}});
-	masturbation.push({text: `Forbid`, updateSlave: {"rules.release.masturbation": 0}});
-
-	// Partner
-	partner.push({text: `Allow`, updateSlave: {"rules.release.partner": 1}});
-	partner.push({text: `Forbid`, updateSlave: {"rules.release.partner": 0}});
-
-	// Family
-	family.push({text: `Allow`, updateSlave: {"rules.release.family": 1}});
-	family.push({text: `Forbid`, updateSlave: {"rules.release.family": 0}});
-
-	// Slaves
-	slaves.push({text: `Allow`, updateSlave: {"rules.release.slaves": 1}});
-	slaves.push({text: `Forbid`, updateSlave: {"rules.release.slaves": 0}});
-
-	// Master
-	master.push({text: `Grant`, updateSlave: {"rules.release.master": 1}});
-	master.push({text: `Deny`, updateSlave: {"rules.release.master": 0}});
-
 	let title = document.createElement('div');
 	title.textContent = `Non-assignment orgasm rules: `;
 	el.append(title);
 
-	let links;
-	if (masturbation.length) {
-		links = document.createElement('div');
-		links.append(`Masturbation: `);
-		status(slave.rules.release.masturbation);
-		links.appendChild(App.UI.SlaveInteract.generateRows(masturbation, slave));
-		links.className = "choices";
-		el.append(links);
-	}
-
-	if (partner.length) {
-		links = document.createElement('div');
-		links.append(`Partner: `);
-		status(slave.rules.release.partner);
-		links.appendChild(App.UI.SlaveInteract.generateRows(partner, slave));
-		links.className = "choices";
-		el.append(links);
-	}
-
-	if (family.length) {
-		links = document.createElement('div');
-		links.append(`Family: `);
-		status(slave.rules.release.family);
-		links.appendChild(App.UI.SlaveInteract.generateRows(family, slave));
-		links.className = "choices";
-		el.append(links);
-	}
+	makeLinks("Masturbation", "rules.release.masturbation");
+	makeLinks("Partner", "rules.release.partner");
+	makeLinks("Family", "rules.release.family");
+	makeLinks("Other slaves", "rules.release.slaves");
+	makeLinks("Master", "rules.release.master", true);
 
-	if (slaves.length) {
-		links = document.createElement('div');
-		links.append(`Other slaves: `);
-		status(slave.rules.release.slaves);
-		links.appendChild(App.UI.SlaveInteract.generateRows(slaves, slave));
-		links.className = "choices";
-		el.append(links);
-	}
+	function makeLinks(text, setting, master=false) {
+		const options =
+			[{text: master ? `Grant` : `Allow`, updateSlave: {[setting]: 1}},
+			 {text: master ? `Deny` : `Forbid`, updateSlave: {[setting]: 0}}];
 
-	if (master.length) {
-		links = document.createElement('div');
-		links.append(`Master: `);
-		status(slave.rules.release.master, true);
-		links.appendChild(App.UI.SlaveInteract.generateRows(master, slave));
+		let links = document.createElement('div');
+		links.append(`${text}: `);
+		links.append(status(_.get(slave, setting), master));
+		links.appendChild(App.UI.SlaveInteract.generateRows(options, slave));
 		links.className = "choices";
 		el.append(links);
 	}
@@ -2373,7 +2320,7 @@ App.UI.SlaveInteract.orgasm = function(slave) {
 			text = setting ? "allowed" : "denied";
 		}
 		selected.textContent = `${text}. `;
-		links.append(selected);
+		return selected;
 	}
 
 	return jQuery('#orgasm').empty().append(el);
@@ -2382,7 +2329,6 @@ App.UI.SlaveInteract.orgasm = function(slave) {
 App.UI.SlaveInteract.custom = (function() {
 	let el;
 	let label;
-	let links;
 	let result;
 	let textbox;
 	return custom;
@@ -3288,7 +3234,7 @@ App.UI.SlaveInteract.generateRows = function(array, slave, category, accessCheck
 	function click(arrayOption) {
 		if (arrayOption.updateSlave) {
 			for (const slaveProperty in arrayOption.updateSlave) {
-				setValue(slave, slaveProperty, arrayOption.updateSlave[slaveProperty]);
+				_.set(slave, slaveProperty, arrayOption.updateSlave[slaveProperty]);
 			}
 		}
 		if (arrayOption.update) {
@@ -3298,20 +3244,6 @@ App.UI.SlaveInteract.generateRows = function(array, slave, category, accessCheck
 		App.UI.SlaveInteract.refreshAll(slave);
 		return;
 	}
-
-	function setValue(obj, path, val) {
-		const ref = resolve(obj, path);
-		ref.obj[ref.prop] = val;
-	}
-
-	function resolve(obj, path, separator = '.') {
-		const pathArray = Array.isArray(path) ? path : path.split(separator);
-		if (pathArray.length === 1) {
-			return {obj: obj, prop: pathArray[0]};
-		}
-		const lastObj = pathArray.slice(0, pathArray.length - 1).reduce((prev, prop) => prev[prop], obj);
-		return {obj: lastObj, prop: pathArray.slice(pathArray.length - 1)};
-	}
 };
 
 App.UI.SlaveInteract.refreshAll = function(slave) {