diff --git a/js/spniBehaviour.js b/js/spniBehaviour.js
index b6de408bb16e9350cee1e9afe15827a04c24bcb2..b5f05f9c4495f4cc256ac0745f1fdc0bcae78fbf 100644
--- a/js/spniBehaviour.js
+++ b/js/spniBehaviour.js
@@ -225,7 +225,7 @@ function checkMarker(predicate, target) {
  * Updates the behaviour of the given player based on the 
  * provided tag.
  ************************************************************/
-function updateBehaviour (player, tag, opp) {
+Player.prototype.updateBehaviour = function(tag, opp) {
 	/* determine if the AI is dialogue locked */
 	//Allow characters to speak. If we change forfeit ideas, we'll likely need to change this as well.
 	//if (players[player].forfeit[1] == CANNOT_SPEAK) {
@@ -233,16 +233,12 @@ function updateBehaviour (player, tag, opp) {
 		//tag = players[player].forfeit[0];
 	//}
 
-    if (!players[player]) {
-        return;
-    }
-
     /* get the AI stage */
-    var stageNum = players[player].stage;
+    var stageNum = this.stage;
 
     /* try to find the stage */
     var stage = null;
-    players[player].xml.find('behaviour').find('stage').each(function () {
+    this.xml.find('behaviour').find('stage').each(function () {
        if (Number($(this).attr('id')) == stageNum) {
            stage = $(this);
        }
@@ -250,7 +246,7 @@ function updateBehaviour (player, tag, opp) {
 
     /* quick check to see if the stage exists */
     if (!stage) {
-        console.log("Error: couldn't find stage for player "+player+" on stage number "+stageNum+" for tag "+tag);
+        console.log("Error: couldn't find stage for player "+this.slot+" on stage number "+stageNum+" for tag "+tag);
         return;
     }
 
@@ -264,7 +260,7 @@ function updateBehaviour (player, tag, opp) {
 
     /* quick check to see if the tag exists */
 	if (states.length <= 0) {
-		console.log("Warning: couldn't find "+tag+" dialogue for player "+player+" at stage "+stageNum);
+		console.log("Warning: couldn't find "+tag+" dialogue for player "+this.slot+" at stage "+stageNum);
 		return false;
 	}
     else {
@@ -378,7 +374,7 @@ function updateBehaviour (player, tag, opp) {
 					}
 				}
 				else { // else look at your own losses
-					if (inInterval(players[player].consecutiveLosses, lossesInRow)) {
+					if (inInterval(this.consecutiveLosses, lossesInRow)) {
 						totalPriority += 60;
 					}
 					else {
@@ -409,7 +405,7 @@ function updateBehaviour (player, tag, opp) {
 
 			// hasHand (priority = 20)
 			if (typeof hasHand !== typeof undefined && hasHand !== false) {
-				if (handStrengthToString(players[player].hand.strength) === hasHand) {
+				if (handStrengthToString(this.hand.strength) === hasHand) {
 					totalPriority += 20;		// priority
 				}
 				else {
@@ -509,8 +505,8 @@ function updateBehaviour (player, tag, opp) {
 
 			// timeInStage (priority = 8)
 			if (typeof timeInStage !== typeof undefined) {
-				if (inInterval(players[player].timeInStage == -1 ? 0 //allow post-strip time to count as 0
-							   : players[player].timeInStage, timeInStage)) {
+				if (inInterval(this.timeInStage == -1 ? 0 //allow post-strip time to count as 0
+							   : this.timeInStage, timeInStage)) {
 					totalPriority += 8;
 				}
 				else {
@@ -598,7 +594,7 @@ function updateBehaviour (player, tag, opp) {
 			// markers (priority = 1)
 			// marker checks have very low priority as they're mainly intended to be used with other target types
 			if (saidMarker) {
-				if (checkMarker(saidMarker, players[player])) {
+				if (checkMarker(saidMarker, this)) {
 					totalPriority += 1;
 				}
 				else {
@@ -606,7 +602,7 @@ function updateBehaviour (player, tag, opp) {
 				}
 			}
 			if (notSaidMarker) {
-				if (!players[player].markers[notSaidMarker]) {
+				if (!this.markers[notSaidMarker]) {
 					totalPriority += 1;
 				}
 				else {
@@ -635,8 +631,8 @@ function updateBehaviour (player, tag, opp) {
 		}
         
         states = bestMatch.reduce(function(list, caseObject) {
-            return list.concat(parseDialogue(caseObject, players[player], opp));
-        }, []);
+            return list.concat(parseDialogue(caseObject, this, opp));
+        }.bind(this), []);
 
         if (states.length > 0) {
             var chosenState = states[getRandomNumber(0, states.length)];
@@ -646,30 +642,30 @@ function updateBehaviour (player, tag, opp) {
 				if (match) {
 					if (match[1] === '+') {
 						// increment marker value
-						if(!players[player].markers[match[2]]) {
-							players[player].markers[match[2]] = 1;
+						if(!this.markers[match[2]]) {
+							this.markers[match[2]] = 1;
 						} else {
-							players[player].markers[match[2]] += 1;
+							this.markers[match[2]] += 1;
 						}
 						
 					} else if (match[1] === '-') {
 						// decrement marker value
-						if(!players[player].markers[match[2]]) {
-							players[player].markers[match[2]] = 0;
+						if(!this.markers[match[2]]) {
+							this.markers[match[2]] = 0;
 						} else {
-							players[player].markers[match[2]] -= 1;
+							this.markers[match[2]] -= 1;
 						}
 					} else {
 						// set marker value
-						players[player].markers[match[3]] = parseInt(match[4], 10);
+						this.markers[match[3]] = parseInt(match[4], 10);
 					}
-				} else if (!players[player].markers[chosenState.marker]) {
-					players[player].markers[chosenState.marker] = 1;
+				} else if (!this.markers[chosenState.marker]) {
+					this.markers[chosenState.marker] = 1;
 				}
 			}
 			
-            players[player].allStates = states;
-            players[player].chosenState = chosenState;
+            this.allStates = states;
+            this.chosenState = chosenState;
             return true;
         }
         console.log("-------------------------------------");
@@ -681,15 +677,15 @@ function updateBehaviour (player, tag, opp) {
  * Updates the behaviour of all players except the given player
  * based on the provided tag.
  ************************************************************/
-function updateAllBehaviours (player, tag, opp) {
+function updateAllBehaviours (player, tag) {
 	for (var i = 1; i < players.length; i++) {
 		if (players[i] && (player === null || i != player)) {
 			if (typeof tag === 'object') {
 				tag.some(function(t) {
-					return updateBehaviour(i, t, opp);
+					return players[i].updateBehaviour(t, players[player]);
 				});
 			} else {
-				updateBehaviour(i, tag, opp);
+				players[i].updateBehaviour(tag, players[player]);
 			}
 		}
 	}
diff --git a/js/spniClothing.js b/js/spniClothing.js
index bbca28c727eb232f74eeb212539d0eb1f8139eda..d0514451590b1b77f210298787b7a5489d05551a 100644
--- a/js/spniClothing.js
+++ b/js/spniClothing.js
@@ -239,27 +239,27 @@ function playerMustStrip (player) {
 					trigger = [FEMALE_HUMAN_MUST_STRIP, FEMALE_MUST_STRIP];
 				}
 			}
-			updateAllBehaviours(player, trigger, players[player]);
+			updateAllBehaviours(player, trigger);
 		} else { 
 			if (players[player].gender == eGender.MALE) {
-				updateAllBehaviours(player, MALE_MUST_STRIP, players[player]);
+				updateAllBehaviours(player, MALE_MUST_STRIP);
 			} else {
-				updateAllBehaviours(player, FEMALE_MUST_STRIP, players[player]);
+				updateAllBehaviours(player, FEMALE_MUST_STRIP);
 			}
 																		
 			var trigger = determineStrippingSituation(players[player]);
-			updateBehaviour(player, trigger);
+			players[player].updateBehaviour(trigger);
 		}
 	} else {
 		/* the player has no clothes and will have to accept a forfeit */
 		if (players[player].gender == eGender.MALE) {
-			updateAllBehaviours(player, MALE_MUST_MASTURBATE, players[player]);
+			updateAllBehaviours(player, MALE_MUST_MASTURBATE);
 		} else if (players[player].gender == eGender.FEMALE) {
-			updateAllBehaviours(player, FEMALE_MUST_MASTURBATE, players[player]);
+			updateAllBehaviours(player, FEMALE_MUST_MASTURBATE);
 		}
 		if (player != HUMAN_PLAYER) {
 			var trigger = determineForfeitSituation(player);
-			updateBehaviour(player, trigger);
+			players[player].updateBehaviour(trigger);
 		}
 	}
 	
@@ -272,17 +272,17 @@ function playerMustStrip (player) {
 function prepareToStripPlayer (player) {
     if (player == HUMAN_PLAYER) { // Never happens (currently)
         if (players[HUMAN_PLAYER].gender == eGender.MALE) {
-            updateAllBehaviours(player, MALE_HUMAN_MUST_STRIP, players[player]);
+            updateAllBehaviours(player, MALE_HUMAN_MUST_STRIP);
         } else {
-            updateAllBehaviours(player, FEMALE_HUMAN_MUST_STRIP, players[player]);
+            updateAllBehaviours(player, FEMALE_HUMAN_MUST_STRIP);
         }
     } else {
         var toBeRemovedClothing = players[player].clothing[players[player].clothing.length - 1];
         players[player].removedClothing = toBeRemovedClothing;
         var dialogueTrigger = getClothingTrigger(player, toBeRemovedClothing, false);
 
-        updateAllBehaviours(player, dialogueTrigger, players[player]);
-        updateBehaviour(player, PLAYER_STRIPPING, null);
+        updateAllBehaviours(player, dialogueTrigger);
+        players[player].updateBehaviour(PLAYER_STRIPPING);
     }
 }
 
@@ -415,7 +415,7 @@ function closeStrippingModal () {
         }
             
         /* update behaviour */
-        updateAllBehaviours(HUMAN_PLAYER, dialogueTrigger, players[HUMAN_PLAYER]);
+        updateAllBehaviours(HUMAN_PLAYER, dialogueTrigger);
         updateAllGameVisuals();
 		
 		/* allow progression */
@@ -448,8 +448,8 @@ function stripAIPlayer (player) {
 	players[player].updateLabel();
 	
 	/* update behaviour */
-	updateAllBehaviours(player, dialogueTrigger, players[player]);
-	updateBehaviour(player, PLAYER_STRIPPED);
+	updateAllBehaviours(player, dialogueTrigger);
+	players[player].updateBehaviour(PLAYER_STRIPPED);
     updateAllGameVisuals();
 	
 }
diff --git a/js/spniForfeit.js b/js/spniForfeit.js
index 03b5223ef0cfcbe047e507979b4a1f8d465055dc..29be54b5c49ecd2822de9f242f671cfbc9a41ab7 100644
--- a/js/spniForfeit.js
+++ b/js/spniForfeit.js
@@ -60,20 +60,20 @@ function startMasturbation (player) {
 	/* update behaviour */
 	if (player == HUMAN_PLAYER) {
 		if (players[HUMAN_PLAYER].gender == eGender.MALE) {
-			updateAllBehaviours(HUMAN_PLAYER, MALE_START_MASTURBATING, players[HUMAN_PLAYER]);
+			updateAllBehaviours(HUMAN_PLAYER, MALE_START_MASTURBATING);
 		} else if (players[HUMAN_PLAYER].gender == eGender.FEMALE) {
-			updateAllBehaviours(HUMAN_PLAYER, FEMALE_START_MASTURBATING, players[HUMAN_PLAYER]);
+			updateAllBehaviours(HUMAN_PLAYER, FEMALE_START_MASTURBATING);
 		}
 		$gameClothingLabel.html("You're Masturbating...");
         $gamePlayerCountdown.show();
 		setForfeitTimer(player);
 	} else {
 		if (players[player].gender == eGender.MALE) {
-			updateAllBehaviours(player, MALE_START_MASTURBATING, players[player]);
+			updateAllBehaviours(player, MALE_START_MASTURBATING);
 		} else if (players[player].gender == eGender.FEMALE) {
-			updateAllBehaviours(player, FEMALE_START_MASTURBATING, players[player]);
+			updateAllBehaviours(player, FEMALE_START_MASTURBATING);
 		}
-		updateBehaviour(player, PLAYER_START_MASTURBATING);
+		players[player].updateBehaviour(PLAYER_START_MASTURBATING);
 		setForfeitTimer(player);
 	}
 	updateAllGameVisuals();
@@ -130,7 +130,7 @@ function tickForfeitTimers () {
                 players[i].forfeit = [PLAYER_FINISHING_MASTURBATING, CAN_SPEAK];
 
                 /* show them cumming */
-                updateBehaviour(i, PLAYER_FINISHING_MASTURBATING);
+                players[i].updateBehaviour(PLAYER_FINISHING_MASTURBATING);
                 updateGameVisual(i);
 
                 /* trigger the callback */
@@ -162,7 +162,7 @@ function tickForfeitTimers () {
 				if (randomChance > timers[i]-1) {
 					/* this player is now heavily masturbating */
 					players[i].forfeit = [PLAYER_HEAVY_MASTURBATING, CANNOT_SPEAK];
-					updateBehaviour(i, PLAYER_HEAVY_MASTURBATING);
+					players[i].updateBehaviour(PLAYER_HEAVY_MASTURBATING);
 					updateGameVisual(i);
 				}
 			}
@@ -175,10 +175,10 @@ function tickForfeitTimers () {
 		&& ((gamePhase == eGamePhase.DEAL && players[HUMAN_PLAYER].out) || gamePhase == eGamePhase.EXCHANGE || gamePhase == eGamePhase.END_LOOP)) {
 		var playerToShow = masturbatingPlayers[getRandomNumber(0, masturbatingPlayers.length)];//index of player chosen to show masturbating//players[]
 		for (var i = 1; i < players.length; i++) {
-			updateBehaviour(i,
-							(i == playerToShow) ? players[i].forfeit[0]
-							: (players[playerToShow].gender == eGender.MALE ? MALE_MASTURBATING : FEMALE_MASTURBATING),
-							players[playerToShow]);
+			players[i].updateBehaviour(
+				(i == playerToShow) ? players[i].forfeit[0]
+					: (players[playerToShow].gender == eGender.MALE ? MALE_MASTURBATING : FEMALE_MASTURBATING),
+				players[playerToShow]);
 		}
 		updateAllGameVisuals();
 	}
@@ -199,14 +199,14 @@ function finishMasturbation (player) {
 
 	/* update other player dialogue */
 	if (players[player].gender == eGender.MALE) {
-		updateAllBehaviours(player, MALE_FINISHED_MASTURBATING, players[player]);
+		updateAllBehaviours(player, MALE_FINISHED_MASTURBATING);
 	} else if (players[player].gender == eGender.FEMALE) {
-		updateAllBehaviours(player, FEMALE_FINISHED_MASTURBATING, players[player]);
+		updateAllBehaviours(player, FEMALE_FINISHED_MASTURBATING);
 	}
 	
 	/* update their dialogue */
 	if (player != HUMAN_PLAYER) {
-		updateBehaviour(player, PLAYER_FINISHED_MASTURBATING);
+		players[player].updateBehaviour(PLAYER_FINISHED_MASTURBATING);
 		
 	}
 	updateAllGameVisuals();
diff --git a/js/spniGame.js b/js/spniGame.js
index 8eee6ab2952b68e4985cfe416f9090dd5a4e2893..9c358c6cd9a8eade5de0ebb85b25bfacb8de7e51 100644
--- a/js/spniGame.js
+++ b/js/spniGame.js
@@ -297,7 +297,7 @@ function makeAIDecision () {
 	}
 
 	/* update a few hardcoded visuals */
-	updateBehaviour(currentTurn, SWAP_CARDS);
+	players[currentTurn].updateBehaviour(SWAP_CARDS);
 	updateGameVisual(currentTurn);
 
 	/* wait and implement AI action */
@@ -316,11 +316,11 @@ function implementAIAction () {
 	/* update behaviour */
 	determineHand(players[currentTurn]);
 	if (players[currentTurn].hand.strength == HIGH_CARD) {
-		updateBehaviour(currentTurn, BAD_HAND);
+		players[currentTurn].updateBehaviour(BAD_HAND);
 	} else if (players[currentTurn].hand.strength == PAIR) {
-		updateBehaviour(currentTurn, OKAY_HAND);
+		players[currentTurn].updateBehaviour(OKAY_HAND);
 	} else {
-		updateBehaviour(currentTurn, GOOD_HAND);
+		players[currentTurn].updateBehaviour(GOOD_HAND);
 	}
 	updateGameVisual(currentTurn);
 
@@ -350,7 +350,7 @@ function advanceTurn () {
         /* check to see if they are still in the game */
         if (players[currentTurn].out && currentTurn > 0) {
             /* update their speech and skip their turn */
-            updateBehaviour(currentTurn, players[currentTurn].forfeit[0]);
+            players[currentTurn].updateBehaviour(players[currentTurn].forfeit[0]);
             updateGameVisual(currentTurn);
 
             timeoutID = window.setTimeout(advanceTurn, GAME_DELAY);
@@ -712,7 +712,7 @@ function handleGameOver() {
 		}
 		for (var i = 1; i < players.length; i++){
 			var tag = (i == winner) ? GAME_OVER_VICTORY : GAME_OVER_DEFEAT;
-			updateBehaviour(i, tag, players[winner]);
+			players[i].updateBehaviour(tag, players[winner]);
 		}
 
         updateAllGameVisuals();