diff --git a/src/uncategorized/bodyModification.tw b/src/uncategorized/bodyModification.tw
index 2a401e2f69b09782185e1e79ef128482c27f801d..c339761feed7ea21466cbe62a667449d31142335 100644
--- a/src/uncategorized/bodyModification.tw
+++ b/src/uncategorized/bodyModification.tw
@@ -45,7 +45,7 @@
 		<</if>>
 		<<set $degradation = 0>>
 	<</if>>
-	<<for $j = 0; $j < $slaves.length; $j++>><<if $activeSlave.ID == $slaves[$j].ID>><<set _slaveBeforeSession = $slaves[$j]>><<break>><</if>><</for>>
+	<<set _slaveBeforeSession = getSlave($activeSlave.ID)>>
 	<<if $activeSlave.tonguePiercing != _slaveBeforeSession.tonguePiercing>>
 		<<if $activeSlave.fetishKnown>>
 			<<if $activeSlave.fetishStrength > 10>>
diff --git a/src/uncategorized/brothelReport.tw b/src/uncategorized/brothelReport.tw
index 5579c9f888c1b7fa885ae8cfa7c27cd11febecc6..8215f2aa0921a71bb049ebba8be4484ec6b2bc8a 100644
--- a/src/uncategorized/brothelReport.tw
+++ b/src/uncategorized/brothelReport.tw
@@ -12,7 +12,7 @@
 <<set $facility = $facility || {}, $facility.brothel = initFacilityStatistics($facility.brothel)>>
 
 <<if ($Madam != 0)>>
-	<<set _FLs = $slaves.findIndex(function(s) { return s.ID == $Madam.ID; })>>
+	<<set _FLs = $slaveIndices[$Madam.ID]>>
 
 	<<if ($slaves[_FLs].health < -80)>>
 		<<set $slaves[_FLs].health += 20>>
diff --git a/src/uncategorized/cellblockReport.tw b/src/uncategorized/cellblockReport.tw
index 660b4e43de26f4cae1dd8577a7f13ceb26fd4674..b5571f67837a993dc7d5055533afda2b9693916b 100644
--- a/src/uncategorized/cellblockReport.tw
+++ b/src/uncategorized/cellblockReport.tw
@@ -10,7 +10,7 @@
 <</if>>
 
 <<if ($Wardeness != 0)>>
-	<<set _FLs = $slaves.findIndex(function(s) { return s.ID == $Wardeness.ID; })>>
+	<<set _FLs = $slaveIndices[$Wardeness.ID]>>
 
 	<<if ($slaves[_FLs].health < -80)>>
 		<<set $slaves[_FLs].health += 20>>
diff --git a/src/uncategorized/clinicReport.tw b/src/uncategorized/clinicReport.tw
index d1b76e6231879270a7445165a9bbb50af4e30d09..6d4adbb568b50ccff4494c75285b3ed6efa59c18 100644
--- a/src/uncategorized/clinicReport.tw
+++ b/src/uncategorized/clinicReport.tw
@@ -10,7 +10,7 @@
 <</if>>
 
 <<if $Nurse != 0>>
-	<<set _FLs = $slaves.findIndex(function(s) { return s.ID == $Nurse.ID; })>>
+	<<set _FLs = $slaveIndices[$Nurse.ID]>>
 
 	<<if ($slaves[_FLs].health < 100)>>
 		<<set $slaves[_FLs].health += 20>>
diff --git a/src/uncategorized/clubReport.tw b/src/uncategorized/clubReport.tw
index 44f57aa00f7dba49499c8e425e42ae61cac4f711..ee3e74b1db6561b022f1be9dcee7a7175660fd6a 100644
--- a/src/uncategorized/clubReport.tw
+++ b/src/uncategorized/clubReport.tw
@@ -12,7 +12,7 @@
 <<set $facility = $facility || {}, $facility.club = initFacilityStatistics($facility.club)>>
 
 <<if $DJ != 0>>
-	<<set _FLs = $slaves.findIndex(function(s) { return s.ID == $DJ.ID; })>>
+	<<set _FLs = $slaveIndices[$DJ.ID]>>
 
 	<<if ($slaves[_FLs].health < -80)>>
 		<<set $slaves[_FLs].health += 20>>
diff --git a/src/uncategorized/dairyReport.tw b/src/uncategorized/dairyReport.tw
index 9d2ddaaec2c1ec827a97449f4922cf4c87b4e8d4..e94437f3eff896a08895168bf627512daa4fe22a 100644
--- a/src/uncategorized/dairyReport.tw
+++ b/src/uncategorized/dairyReport.tw
@@ -12,7 +12,7 @@
 <<set $facility = $facility || {}, $facility.dairy = initFacilityStatistics($facility.dairy)>>
 
 <<if ($Milkmaid != 0)>>
-	<<set _FLs = $slaves.findIndex(function(s) { return s.ID == $Milkmaid.ID; })>>
+	<<set _FLs = $slaveIndices[$Milkmaid.ID]>>
 
 	<<if $slaves[_FLs].health < 90>>
 		<<set $slaves[_FLs].curatives = 2>>
diff --git a/src/uncategorized/dispensary.tw b/src/uncategorized/dispensary.tw
index 0833a6ac0cca8c170ea50c55d9495283d5a608a2..0db5649499ec930eebef3937977cbd2046f368e1 100644
--- a/src/uncategorized/dispensary.tw
+++ b/src/uncategorized/dispensary.tw
@@ -67,20 +67,20 @@ The Organ Farm
 <<if $organs.length > 0>>
 It is currently working on the following organs:
 	<<for $i = 0; $i < $organs.length; $i++>>
-		<<for $j = 0; $j < $slaves.length; $j++>>
-			<<if $slaves[$j].ID == $organs[$i].ID>>
-				<br>
-				$slaves[$j].slaveName's $organs[$i].type,
-				<<if $organFarmUpgrade == 1>>
-					<<print $organs[$i].weeksToCompletion>>
-				<<elseif $organFarmUpgrade == 2>>
-					<<print Math.ceil($organs[$i].weeksToCompletion/2)>>
-				<<elseif $organFarmUpgrade == 3>>
-					<<print Math.ceil($organs[$i].weeksToCompletion/4)>>
-				<</if>> weeks from completion.
-				<<break>>
-			<</if>>
-		<</for>>
+		<<set $j = $slaveIndices[$organs[$i].ID]>>
+		<<if def $j>>
+			<br>
+			$slaves[$j].slaveName's $organs[$i].type,
+			<<if $organFarmUpgrade == 1>>
+				<<print $organs[$i].weeksToCompletion>>
+			<<elseif $organFarmUpgrade == 2>>
+				<<print Math.ceil($organs[$i].weeksToCompletion/2)>>
+			<<elseif $organFarmUpgrade == 3>>
+				<<print Math.ceil($organs[$i].weeksToCompletion/4)>>
+			<</if>> weeks from completion.
+		<<else>>
+			@@.red;Error: organID not found.@@
+		<</if>>
 	<</for>>
 	<br>
 <</if>>
@@ -111,12 +111,12 @@ It is currently working on the following organs:
 	<br>
 	Currently the following organs are completed and ready for implantation:
 	<<for $i = 0; $i < $completedOrgans.length; $i++>>
-		<<for $j = 0; $j < $slaves.length; $j++>>
-			<<if $slaves[$j].ID == $completedOrgans[$i].ID>>
-				<br>$slaves[$j].slaveName's $completedOrgans[$i].type.
-				<<break>>
-			<</if>>
-		<</for>>
+		<<set $j = $slaveIndices[$completedOrgans[$i].ID]>>
+		<<if def $j>>
+			<br>$slaves[$j].slaveName's $completedOrgans[$i].type.
+		<<else>>
+			@@.red;Error: completedOrganID not found.@@
+		<</if>>
 	<</for>>
 	<br>
 <</if>>
diff --git a/src/uncategorized/saLiveWithHG.tw b/src/uncategorized/saLiveWithHG.tw
index 35235f1f8c2f0f28132fb318c4bc36230d491051..1df4b110d881f9f40eff47d06cc442c42106103b 100644
--- a/src/uncategorized/saLiveWithHG.tw
+++ b/src/uncategorized/saLiveWithHG.tw
@@ -69,7 +69,7 @@
 	<<set $slaves[$i].devotion += 1>>
 <</if>>
 
-<<if ($HeadGirl.rivalry != 0) && ($HeadGirl.relationshipTarget == $slaves[$i].ID)>>
+<<if ($HeadGirl.rivalry != 0) && ($HeadGirl.rivalryTarget == $slaves[$i].ID)>>
 	$HeadGirl.slaveName @@.lightgreen;resolves the rivalry@@ between her and $slaves[$i].slaveName, mostly by the expedient of punishing $slaves[$i].slaveName savagely whenever she gives any trouble.
 	<<set $HeadGirl.rivalry = 0, $HeadGirl.rivalryTarget = 0, $slaves[$i].rivalry = 0, $slaves[$i].rivalryTarget = 0>>
 <<elseif ($HeadGirl.relationship == 0)>>
diff --git a/src/uncategorized/slaveSold.tw b/src/uncategorized/slaveSold.tw
index bc187d1dbbc21b0bc0a4548055028ca795989efe..994b0452ad988f2c3c1e029099628ba3cf059c81 100644
--- a/src/uncategorized/slaveSold.tw
+++ b/src/uncategorized/slaveSold.tw
@@ -121,33 +121,25 @@
 		<</for>>
 	<<else>>
 	<<if $activeSlave.relation != 0>>
-		<<for $j = 0; $j < $slaves.length; $j++>>
-			<<if $slaves[$j].ID == $activeSlave.relationTarget>>
-			<<if $slaves[$j].fetish != "mindbroken">>
-				$slaves[$j].slaveName is @@.mediumorchid;grieved@@ that you are selling her $activeSlave.relation.
-				<<ClearSummaryCache $slaves[$j]>>
-				<br><br>
-				<<set $slaves[$j].devotion -= 20>>
-				<<set $display = 1>>
-				<<break>>
-			<</if>>
-			<</if>>
-		<</for>>
+		<<set $j = $slaveIndices[$activeSlave.relationTarget]>>
+		<<if def $j && $slaves[$j].fetish != "mindbroken">>
+			$slaves[$j].slaveName is @@.mediumorchid;grieved@@ that you are selling her $activeSlave.relation.
+			<<ClearSummaryCache $slaves[$j]>>
+			<br><br>
+			<<set $slaves[$j].devotion -= 20>>
+			<<set $display = 1>>
+		<</if>>
 	<</if>>
 	<</if>>
 	<<if $activeSlave.relationship > 0>>
-		<<for $j = 0; $j < $slaves.length; $j++>>
-			<<if $slaves[$j].ID == $activeSlave.relationshipTarget>>
-			<<if $slaves[$j].fetish != "mindbroken">>
-				$slaves[$j].slaveName is @@.mediumorchid;grieved@@ that you are selling her best source of comfort and companionship in a life of bondage.
-				<<ClearSummaryCache $slaves[$j]>>
-				<br><br>
-				<<set $slaves[$j].devotion -= $slaves[$j].relationship>>
-				<<set $display = 1>>
-				<<break>>
-			<</if>>
-			<</if>>
-		<</for>>
+		<<set $j = $slaveIndices[$activeSlave.relationshipTarget]>>
+		<<if def $j && $slaves[$j].fetish != "mindbroken">>
+			$slaves[$j].slaveName is @@.mediumorchid;grieved@@ that you are selling her best source of comfort and companionship in a life of bondage.
+			<<ClearSummaryCache $slaves[$j]>>
+			<br><br>
+			<<set $slaves[$j].devotion -= $slaves[$j].relationship>>
+			<<set $display = 1>>
+		<</if>>
 	<<elseif $activeSlave.relationship == -3>>
 		Selling one of your slave wives is @@.red;socially unacceptable.@@ In addition, your other devoted slaves are @@.gold;worried@@ that you may not respect their status.
 		<<ClearSummaryCache>>
@@ -161,18 +153,14 @@
 		<</for>>
 	<</if>>
 	<<if $activeSlave.rivalry != 0>>
-		<<for $j = 0; $j < $slaves.length; $j++>>
-			<<if $slaves[$j].ID == $activeSlave.rivalryTarget>>
-			<<if $slaves[$j].fetish != "mindbroken">>
-				$slaves[$j].slaveName is @@.hotpink;pleased@@ that she won't have to see her rival any more.
-				<<ClearSummaryCache $slaves[$j]>>
-				<br><br>
-				<<set $slaves[$j].devotion += $slaves[$j].rivalry*0.3>>
-				<<set $display = 1>>
-				<<break>>
-			<</if>>
-			<</if>>
-		<</for>>
+		<<set $j = $slaveIndices[$activeSlave.rivalryTarget]>>
+		<<if def $j && $slaves[$j].fetish != "mindbroken">>
+			$slaves[$j].slaveName is @@.hotpink;pleased@@ that she won't have to see her rival any more.
+			<<ClearSummaryCache $slaves[$j]>>
+			<br><br>
+			<<set $slaves[$j].devotion += $slaves[$j].rivalry*3>>
+			<<set $display = 1>>
+		<</if>>
 	<</if>>
 
 <<set $seed = 0>>
diff --git a/src/uncategorized/spaReport.tw b/src/uncategorized/spaReport.tw
index cbfc0ce0e78d5fdeb59df67f8b5ec7fbd6f45050..92d79feafcc02765ca9f7ddfab8f2e633e2a3016 100644
--- a/src/uncategorized/spaReport.tw
+++ b/src/uncategorized/spaReport.tw
@@ -10,7 +10,7 @@
 <</if>>
 
 <<if $Attendant != 0>>
-	<<set _FLs = $slaves.findIndex(function(s) { return s.ID == $Attendant.ID; })>>
+	<<set _FLs = $slaveIndices[$Attendant.ID]>>
 
 	<<if ($slaves[_FLs].health < 100)>>
 		<<set $slaves[_FLs].health += 20>>
diff --git a/src/uncategorized/subordinateTargeting.tw b/src/uncategorized/subordinateTargeting.tw
index 063577ef9d49100ee54e48ea9a18c23063ec265f..51525b259dbe49ac7ed5d9df359f9c50a44296fc 100644
--- a/src/uncategorized/subordinateTargeting.tw
+++ b/src/uncategorized/subordinateTargeting.tw
@@ -8,8 +8,8 @@
 	<<set $activeSlave.subTarget = 0>>
 <</if>>
 <<assignJob $activeSlave "be a subordinate slave">>
-<<set _st = $slaves.findIndex(function(s) { return s.ID == $activeSlave.subTarget; })>>
-<<if _st != -1>>
+<<set _st = $slaveIndices[$activeSlave.subTarget]>>
+<<if def _st>>
 	$activeSlave.slaveName will submit to ''__@@.pink;$slaves[_st].slaveName@@__'' this week.
 <<else>>
 	$activeSlave.slaveName has not been given to any particular slave, so she will have to offer herself to everyone this week.
diff --git a/src/uncategorized/surgeryDegradation.tw b/src/uncategorized/surgeryDegradation.tw
index 64b32908a8c5bde7d248efee42375c4a09d3671b..2347bd59fb3f8ba1784df390a64ac076fb2bc8fc 100644
--- a/src/uncategorized/surgeryDegradation.tw
+++ b/src/uncategorized/surgeryDegradation.tw
@@ -175,56 +175,46 @@ As the remote surgery's long recovery cycle completes,
 			<</switch>>
 		<</for>>
 		<<if $activeSlave.relationship > 0>>
-			<<for $j = 0; $j < $slaves.length; $j++>>
-				<<if $slaves[$j].ID == $activeSlave.relationshipTarget>>
-					$slaves[$j].slaveName will be @@.mediumorchid;horrified@@ and @@.gold;afraid@@ when she finds out that her <<if $activeSlave.relationship > 4>>wife<<elseif $activeSlave.relationship > 3>>lover<<elseif $activeSlave.relationship > 2>>intimate friend<<elseif $activeSlave.relationship > 1>>best friend<<else>>friend<</if>> is now a Fuckdoll.
-					<<set $slaves[$j].devotion -= $activeSlave.relationship*10>>
-					<<set $slaves[$j].trust -= $activeSlave.relationship*10>>
-					<<set $slaves[$j].relationship = 0>>
-					<<set $slaves[$j].relationshipTarget = 0>>
-					<<break>>
-				<</if>>
-			<</for>>
+			<<set $j = $slaveIndices[$activeSlave.relationshipTarget]>>
+			<<if def $j>>
+				$slaves[$j].slaveName will be @@.mediumorchid;horrified@@ and @@.gold;afraid@@ when she finds out that her <<if $activeSlave.relationship > 4>>wife<<elseif $activeSlave.relationship > 3>>lover<<elseif $activeSlave.relationship > 2>>intimate friend<<elseif $activeSlave.relationship > 1>>best friend<<else>>friend<</if>> is now a Fuckdoll.
+				<<set $slaves[$j].devotion -= $activeSlave.relationship*10>>
+				<<set $slaves[$j].trust -= $activeSlave.relationship*10>>
+				<<set $slaves[$j].relationship = 0>>
+				<<set $slaves[$j].relationshipTarget = 0>>
+			<</if>>
 		<<elseif $activeSlave.relationship < 0>>
 			Its @@.lightsalmon;slave relationship to you is effectively over,@@ since everyone in the world outside its suit is created equal to her. She'll probably forget to distinguish your <<if $PC.dick == 1>>dick if it's pushed inside her<<else>>pussy if it's pressed against her face hole<</if>> soon enough.
 		<</if>>
 	<<else>>
-	<<if $activeSlave.relation != 0>>
-		<<for $j = 0; $j < $slaves.length; $j++>>
-			<<if $activeSlave.relationshipTarget != $activeSlave.relationTarget>>
-				<<if $slaves[$j].ID == $activeSlave.relationTarget>>
-					$slaves[$j].slaveName will be @@.mediumorchid;horrified@@ and @@.gold;afraid@@ when she finds out that her $activeSlave.relation is now a Fuckdoll.
-					<<set $slaves[$j].devotion -= 40>>
-					<<set $slaves[$j].trust -= 40>>
-					<<break>>
-				<</if>>
+		<<if $activeSlave.relation != 0>>
+			<<set $j = $slaveIndices[$activeSlave.relationTarget]>>
+			<<if def $j>>
+				$slaves[$j].slaveName will be @@.mediumorchid;horrified@@ and @@.gold;afraid@@ when she finds out that her $activeSlave.relation is now a Fuckdoll.
+				<<set $slaves[$j].devotion -= 40>>
+				<<set $slaves[$j].trust -= 40>>
 			<</if>>
-		<</for>>
-	<</if>>
+		<</if>>
 		<<if $activeSlave.relationship > 0>>
-			<<for $j = 0; $j < $slaves.length; $j++>>
-				<<if $slaves[$j].ID == $activeSlave.relationshipTarget>>
-					$slaves[$j].slaveName will be @@.mediumorchid;horrified@@ and @@.gold;afraid@@ when she finds out that her <<if $activeSlave.relationshipTarget == $activeSlave.relationTarget>>$activeSlave.relation and<</if>> <<if $activeSlave.relationship > 4>>wife<<elseif $activeSlave.relationship > 3>>lover<<elseif $activeSlave.relationship > 2>>intimate friend<<elseif $activeSlave.relationship > 1>>best friend<<else>>friend<</if>> is now a Fuckdoll.
-					<<set $slaves[$j].devotion -= $activeSlave.relationship*10>>
-					<<set $slaves[$j].trust -= $activeSlave.relationship*10>>
-					<<set $slaves[$j].relationship = 0>>
-					<<set $slaves[$j].relationshipTarget = 0>>
-					<<break>>
-				<</if>>
-			<</for>>
+			<<set $j = $slaveIndices[$activeSlave.relationshipTarget]>>
+			<<if def $j>>
+				$slaves[$j].slaveName will be @@.mediumorchid;horrified@@ and @@.gold;afraid@@ when she finds out that her <<if $activeSlave.relationshipTarget == $activeSlave.relationTarget>>$activeSlave.relation and<</if>> <<if $activeSlave.relationship > 4>>wife<<elseif $activeSlave.relationship > 3>>lover<<elseif $activeSlave.relationship > 2>>intimate friend<<elseif $activeSlave.relationship > 1>>best friend<<else>>friend<</if>> is now a Fuckdoll.
+				<<set $slaves[$j].devotion -= $activeSlave.relationship*10>>
+				<<set $slaves[$j].trust -= $activeSlave.relationship*10>>
+				<<set $slaves[$j].relationship = 0>>
+				<<set $slaves[$j].relationshipTarget = 0>>
+			<</if>>
 		<<elseif $activeSlave.relationship < 0>>
 			Its @@.lightsalmon;slave relationship to you is effectively over,@@ since everyone in the world outside its suit is created equal to her. She'll probably forget to distinguish your <<if $PC.dick == 1>>dick if it's pushed inside her<<else>>pussy if it's pressed against her face hole<</if>> soon enough.
 		<</if>>
 	<</if>> /*closes extended family mode */
 	<<if $activeSlave.rivalry != 0>>
-		<<for $j = 0; $j < $slaves.length; $j++>>
-			<<if $slaves[$j].ID == $activeSlave.rivalryTarget>>
-				Naturally, its rivalry with $slaves[$j].slaveName is over. $slaves[$j].slaveName will be pleased she doesn't have to see $activeSlave.slaveName any more, though being a Fuckdoll is terrifying enough that it's not likely she'll derive much satisfaction from it.
-				<<set $slaves[$j].rivalry = 0>>
-				<<set $slaves[$j].rivalryTarget = 0>>
-				<<break>>
-			<</if>>
-		<</for>>
+		<<set $j = $slaveIndices[$activeSlave.rivalryTarget]>>
+		<<if def $j>>
+			Naturally, its rivalry with $slaves[$j].slaveName is over. $slaves[$j].slaveName will be pleased she doesn't have to see $activeSlave.slaveName any more, though being a Fuckdoll is terrifying enough that it's not likely she'll derive much satisfaction from it.
+			<<set $slaves[$j].rivalry = 0>>
+			<<set $slaves[$j].rivalryTarget = 0>>
+		<</if>>
 	<</if>>
 	<<set $activeSlave.relationship=0, $activeSlave.relationshipTarget=0, $activeSlave.rivalry=0, $activeSlave.rivalryTarget=0>>
 
@@ -703,7 +693,7 @@ As the remote surgery's long recovery cycle completes,
 		<<set $activeSlave.trust -= 2>>
 	<<else>>
 		and, when <<if canSee($activeSlave)>>she looks at herself in the mirror<<else>>is informed of her new look<</if>>, she is @@.mediumorchid;disgusted@@ by the @@.gold;awful scar@@ she now bears.
-		<<set $activeSlave.devotion -=10>>
+		<<set $activeSlave.devotion -= 10>>
 		<<set $activeSlave.trust -= 10>>
 	<</if>>
 
diff --git a/src/uncategorized/walkPast.tw b/src/uncategorized/walkPast.tw
index d2e146ef095efa2c8d0b982d056c26edc7f2ae3a..53fe91a832989c6746de265b9fbc67a126be513f 100644
--- a/src/uncategorized/walkPast.tw
+++ b/src/uncategorized/walkPast.tw
@@ -356,14 +356,8 @@
 /* TIME TOGETHER EXCEPTION ENDS */
 
 <<if ($partner == "rivalry")>>
-	<<set _partnerSlave = null>>
-	<<for _i = 0; _i < $slaves.length; _i++>>
-		<<if $slaves[_i].ID == $activeSlave.rivalryTarget>>
-			<<set _partnerSlave = $slaves[_i]>>
-			<<break>>
-		<</if>>
-	<</for>>
-	<<if _partnerSlave == null>>
+	<<set _partnerSlave = getSlave($activeSlave.rivalryTarget)>>
+	<<if ndef _partnerSlave>>
 		<<goto "Main">>
 	<</if>>
 
@@ -527,23 +521,17 @@
 	<</switch>>
 	<<set $target = "FRival", _partnerSlave = null>>
 <<elseif ($partner == "relationship") && ($activeSlave.relationship >= 3) && ($activeSlave.releaseRules !== "restrictive") && ($activeSlave.releaseRules !== "masturbation")>>
-	<<set _partnerSlave = null>>
-	<<for _i = 0; _i < $slaves.length; _i++>>
-		<<if $slaves[_i].ID == $activeSlave.relationshipTarget>>
-			<<set _partnerSlave = $slaves[_i]>>
-			<<if $activeSlave.relationship <= 3>>
-			<<set _activeSlaveRel = "friend with benefits">>
-			<<elseif $activeSlave.relationship <= 4>>
-			<<set _activeSlaveRel = "lover">>
-			<<else>>
-			<<set _activeSlaveRel = "slave wife">>
-			<</if>>
-			<<break>>
-		<</if>>
-	<</for>>
-	<<if _partnerSlave == null>>
+	<<set _partnerSlave = getSlave($activeSlave.relationshipTarget)>>
+	<<if ndef _partnerSlave>>
 		<<goto "Main">>
 	<</if>>
+	<<if $activeSlave.relationship <= 3>>
+		<<set _activeSlaveRel = "friend with benefits">>
+	<<elseif $activeSlave.relationship <= 4>>
+		<<set _activeSlaveRel = "lover">>
+	<<else>>
+		<<set _activeSlaveRel = "slave wife">>
+	<</if>>
 
 	$activeSlave.slaveName and _partnerSlave.slaveName are
 	<<set _seed = random(1,3)>>
@@ -836,54 +824,34 @@
 	<<if $slaves[_i].ID == _partnerSlave.ID>>
 		<<set $slaves[_i] = _partnerSlave>>
 	<<else>>
-		<<for _i = 0; _i < $slaves.length; _i++>>
-			<<if $slaves[_i].ID == _partnerSlave.ID>>
-			<<set $slaves[_i] = _partnerSlave>>
-			<<break>>
-			<</if>>
-		<</for>>
+		<<set $slaves[$slaveIndices[_partnerSlave.ID]] = _partnerSlave>>
 	<</if>>
-	<<for _i = 0; _i < $slaves.length; _i++>>
-		<<if $slaves[_i].ID == $activeSlave.ID>>
-		<<set $slaves[_i] = $activeSlave>>
-		<<break>>
-		<</if>>
-	<</for>>
+	<<set $slaves[$slaveIndices[activeSlave.ID]] = activeSlave>>	
 	<<set $target = "FRelation", _partnerSlave = null>>
 
 <<elseif ($partner == "relationship") || ($partner == "relation")>>
 	<<set _partnerSlave = null>>
 	<<if ($partner == "relation")>>
 		<<if $familyTesting == 1>>
-				<<set _partnerSlave = $relation>>
+			<<set _partnerSlave = $relation>>
 		<<else>>
-			<<for _i = 0; _i < $slaves.length; _i++>>
-				<<if $slaves[_i].ID == $activeSlave.relationTarget>>
-						<<set _partnerSlave = $slaves[_i]>>
-					<<break>>
-				<</if>>
-			<</for>>
+			<<set _partnerSlave = getSlave($activeSlave.relationTarget)>>
 		<</if>>
 	<<else>>
-		<<for _i = 0; _i < $slaves.length; _i++>>
-			<<if $slaves[_i].ID == $activeSlave.relationshipTarget>>
-			<<set _partnerSlave = $slaves[_i]>>
-			<<if $activeSlave.relationship <= 1>>
-				<<set _activeSlaveRel = "friend", _partnerRel = "friend">>
-			<<elseif $activeSlave.relationship <= 2>>
-				<<set _activeSlaveRel = "best friend", _partnerRel = "best friend">>
-			<<elseif $activeSlave.relationship <= 3>>
-				<<set _activeSlaveRel = "friend with benefits", _partnerRel = "friend with benefits">>
-			<<elseif $activeSlave.relationship <= 4>>
-				<<set _activeSlaveRel = "lover", _partnerRel = "lover">>
-			<<elseif $activeSlave.relationship > 4>>
-				<<set _activeSlaveRel = "slave wife", _partnerRel = "slave wife">>
-			<</if>>
-			<<break>>
-			<</if>>
-		<</for>>
+		<<set _partnerSlave = getSlave($activeSlave.relationshipTarget)>>
+		<<if $activeSlave.relationship <= 1>>
+			<<set _activeSlaveRel = "friend", _partnerRel = "friend">>
+		<<elseif $activeSlave.relationship <= 2>>
+			<<set _activeSlaveRel = "best friend", _partnerRel = "best friend">>
+		<<elseif $activeSlave.relationship <= 3>>
+			<<set _activeSlaveRel = "friend with benefits", _partnerRel = "friend with benefits">>
+		<<elseif $activeSlave.relationship <= 4>>
+			<<set _activeSlaveRel = "lover", _partnerRel = "lover">>
+		<<elseif $activeSlave.relationship > 4>>
+			<<set _activeSlaveRel = "slave wife", _partnerRel = "slave wife">>
+		<</if>>
 	<</if>>
-	<<if _partnerSlave == null>>
+	<<if ndef _partnerSlave || _partnerSlave == null>>
 		<<goto "Main">>
 	<</if>>