diff --git a/Actor.js b/Actor.js
index 0bf154dc7b..c3fa5e01a4 100644
--- a/Actor.js
+++ b/Actor.js
@@ -16,7 +16,7 @@ var ActorOwner = 10;
 
 // Make sure the current actor is loaded (create it if not)
 function ActorLoad(ActorToLoad, ActorLeaveScreen) {
-	
+
 	// Keep the actor leave screen
 	LeaveIcon = "Leave";
 	LeaveScreen = ActorLeaveScreen;
@@ -40,14 +40,14 @@ function ActorLoad(ActorToLoad, ActorLeaveScreen) {
 function ActorGetValue(ValueType) {
 	for (var L = 0; L < Actor.length; L++)
 		if (CurrentActor == Actor[L][ActorName])
-			return Actor[L][ValueType];	
+			return Actor[L][ValueType];
 }
 
 // Return a value from a specific actor data
 function ActorSpecificGetValue(SpecificActorName, ValueType) {
 	for (var L = 0; L < Actor.length; L++)
 		if (SpecificActorName == Actor[L][ActorName])
-			return Actor[L][ValueType];	
+			return Actor[L][ValueType];
 }
 
 // Return the current actor's localized name
@@ -59,7 +59,7 @@ function ActorGetDisplayName() {
 
 // Change positively or negatively the current actor attitude toward the player
 function ActorChangeAttitude(LoveAttitude, SubAttitude) {
-	
+
 	// If we need to make a change to the attitude, we apply it
 	if ((LoveAttitude != 0) || (SubAttitude != 0))
 		for (var L = 0; L < Actor.length; L++)
@@ -70,25 +70,25 @@ function ActorChangeAttitude(LoveAttitude, SubAttitude) {
 				if (Actor[L][ActorLove] < -99) Actor[L][ActorLove] = -99;
 				if (Actor[L][ActorSubmission] > 99) Actor[L][ActorSubmission] = 99;
 				if (Actor[L][ActorSubmission] < -99) Actor[L][ActorSubmission] = -99;
-			}	
+			}
 
 }
 
 // Change positively or negatively a specific actor attitude toward the player
 function ActorSpecificChangeAttitude(SpecificActorName, LoveAttitude, SubAttitude) {
-	
+
 	// If we need to make a change to the attitude, we apply it
 	if ((LoveAttitude != 0) || (SubAttitude != 0))
 		for (var L = 0; L < Actor.length; L++)
 			if (SpecificActorName == Actor[L][ActorName]) {
 				Actor[L][ActorLove] = Actor[L][ActorLove] + parseInt(LoveAttitude);
 				Actor[L][ActorSubmission] = Actor[L][ActorSubmission] + parseInt(SubAttitude);
-			}	
+			}
 
 }
 
 // Add an orgasm to the actor count and logs the event
-function ActorAddOrgasm() {	
+function ActorAddOrgasm() {
 	for (var L = 0; L < Actor.length; L++)
 		if (CurrentActor == Actor[L][ActorName])
 			Actor[L][ActorOrgasmCount]++;
@@ -97,7 +97,7 @@ function ActorAddOrgasm() {
 
 // Validates that a specific interaction stage is available for the player
 function ActorInteractionAvailable(LoveReq, SubReq, VarReq, InText, ForIntro) {
-	
+
 	// Make sure the love / sub level is match (both positive and negative)
 	VarReq = VarReq.trim();
 	InText = InText.trim();
@@ -105,13 +105,13 @@ function ActorInteractionAvailable(LoveReq, SubReq, VarReq, InText, ForIntro) {
 	if ((parseInt(SubReq) > 0) && (parseInt(ActorGetValue(ActorSubmission)) < parseInt(SubReq))) return false;
 	if ((parseInt(LoveReq) < 0) && (parseInt(ActorGetValue(ActorLove)) > parseInt(LoveReq))) return false;
 	if ((parseInt(SubReq) < 0) && (parseInt(ActorGetValue(ActorSubmission)) > parseInt(SubReq))) return false;
-	
+
 	// Checks if there's a custom script variable or a common variable to process
 	if ((VarReq != "") && (VarReq.substr(0, 7) == "Common_") && (window[VarReq] == false)) return false;
 	if ((VarReq != "") && (VarReq.substr(0, 8) == "!Common_") && (window[VarReq.substr(1)] == true)) return false;
 	if ((VarReq != "") && (VarReq.substr(0, 7) != "Common_") && (VarReq.substr(0, 1) != "!") && (window[CurrentChapter + "_" + CurrentScreen + "_" + VarReq] == false)) return false;
 	if ((VarReq != "") && (VarReq.substr(0, 7) != "Common_") && (VarReq.substr(0, 1) == "!") && (window[CurrentChapter + "_" + CurrentScreen + "_" + VarReq.substr(1)] == true)) return false;
-	
+
 	// Check if the player is gagged, only interactions that starts with '(', '(' or '@' are allowed
 	var nonSpeechActionsStart = [
 		"(",
@@ -119,7 +119,7 @@ function ActorInteractionAvailable(LoveReq, SubReq, VarReq, InText, ForIntro) {
 		"@",
 	];
 	if ((nonSpeechActionsStart.indexOf(InText.substr(0, 1)) < 0) && Common_PlayerGagged && !ForIntro) return false;
-	
+
 	// Since nothing blocks, we allow it
 	return true;
 
@@ -306,7 +306,7 @@ function ActorUnblindfold() {
 
 // Tries to apply a restrain on the current actor
 function ActorApplyRestrain(RestrainName) {
-	
+
 	// The rope can be applied twice, the item becomes "TwoRopes"
 	if ((RestrainName == "Rope") && ActorHasInventory("Rope") && !ActorHasInventory("TwoRopes") && PlayerHasInventory("Rope")) RestrainName = "TwoRopes";
 	if ((RestrainName == "Rope") && ActorHasInventory("Rope") && ActorHasInventory("TwoRopes") && !ActorHasInventory("ThreeRopes") && PlayerHasInventory("Rope") && (PlayerGetSkillLevel("RopeMastery") >= 1)) RestrainName = "ThreeRopes";
@@ -315,20 +315,20 @@ function ActorApplyRestrain(RestrainName) {
 	var RestrainText = GetText(RestrainName);
 	if ((RestrainText.substr(0, 20) != "MISSING TEXT FOR TAG") && (RestrainText != "") && !Common_PlayerRestrained && (PlayerHasInventory(RestrainName) || RestrainName == "TwoRopes" || RestrainName == "ThreeRopes") && !ActorHasInventory(RestrainName)) {
 
-		// Third rope 
+		// Third rope
 		if (RestrainName == "ThreeRopes") {
 			PlayerRemoveInventory("Rope", 1);
 			ActorAddInventory("ThreeRopes");
-			CurrentTime = CurrentTime + 60000;			
+			CurrentTime = CurrentTime + 60000;
 		}
-	
-		// Second rope 
+
+		// Second rope
 		if (RestrainName == "TwoRopes") {
 			PlayerRemoveInventory("Rope", 1);
 			ActorAddInventory("TwoRopes");
-			CurrentTime = CurrentTime + 60000;			
+			CurrentTime = CurrentTime + 60000;
 		}
-	
+
 		// Regular restraints
 		if ((RestrainName == "Rope") || (RestrainName == "Cuffs") || (RestrainName == "Armbinder")) {
 			if (!ActorIsRestrained()) {
@@ -415,7 +415,7 @@ function ActorSpecificHasInventory(QueryActor, QueryInventory) {
 }
 
 // Clear all inventory from an actor (expect the egg, plug, chastitybelt and collar)
-function ActorSpecificClearInventory(QueryActor, Recover) {	
+function ActorSpecificClearInventory(QueryActor, Recover) {
 	for (var A = 0; A < Actor.length; A++)
 		if (Actor[A][ActorName] == QueryActor) {
 			var HadEgg = ActorSpecificHasInventory(QueryActor, "VibratingEgg");
@@ -440,7 +440,7 @@ function ActorSpecificClearInventory(QueryActor, Recover) {
 
 // Returns the actor image file to use
 function ActorSpecificGetImage(QueryActor) {
-	
+
 	// The image file name is constructed from the inventory
 	var ActorImage = QueryActor;
 	if (ActorSpecificHasInventory(QueryActor, "Cuffs")) ActorImage = ActorImage + "_Cuffs";
diff --git a/BondageClub/Screens/Character/Appearance/Appearance.js b/BondageClub/Screens/Character/Appearance/Appearance.js
index fe8f3a8a85..7f73126321 100644
--- a/BondageClub/Screens/Character/Appearance/Appearance.js
+++ b/BondageClub/Screens/Character/Appearance/Appearance.js
@@ -910,7 +910,7 @@ function CharacterAppearanceNextItem(C, Group, Forward, Description) {
 /**
  * Find the next color for the item
  * @param {Character} C - The character whose items are cycled
- * @param {string} Group - The name of the group for which we are colour cycling
+ * @param {string} Group - The name of the group for which we are color cycling
  * @returns {void} - Nothing
  */
 function CharacterAppearanceNextColor(C, Group) {
@@ -954,9 +954,9 @@ function CharacterAppearanceMoveOffset(C, Move) {
 
 /**
  * Sets the color for a specific group
- * @param {Character} C - The character whose item group should be coloured
- * @param {string} Color - The colour (in the format "#rrggbb") to be applied to the group
- * @param {string} Group - The name of the group, whose colour should be changed
+ * @param {Character} C - The character whose item group should be colored
+ * @param {string} Color - The color (in the format "#rrggbb") to be applied to the group
+ * @param {string} Group - The name of the group, whose color should be changed
  * @returns {void} - Nothing
  */
 function CharacterAppearanceSetColorForGroup(C, Color, Group) {
diff --git a/BondageClub/Screens/Character/Appearance/Text_Appearance.csv b/BondageClub/Screens/Character/Appearance/Text_Appearance.csv
index 5ea8a717b6..d3d1a525f2 100644
--- a/BondageClub/Screens/Character/Appearance/Text_Appearance.csv
+++ b/BondageClub/Screens/Character/Appearance/Text_Appearance.csv
@@ -19,7 +19,7 @@ DialogPermissionMode,Edit item permissions
 Use,Use this item
 UseDisabled,Unable to use due to player permissions
 Reset,Reset character
-ColorPick,Select a colour
-MultiColorPick,Select colours
+ColorPick,Select a color
+MultiColorPick,Select colors
 ColorPickDisabled,Unable to change color due to player permissions,,
 MultiColorPickDisabled,Unable to change color due to player permissions,,
diff --git a/BondageClub/Screens/Character/Appearance/Text_Appearance_CN.txt b/BondageClub/Screens/Character/Appearance/Text_Appearance_CN.txt
index 88a675b688..077e2ebafb 100644
--- a/BondageClub/Screens/Character/Appearance/Text_Appearance_CN.txt
+++ b/BondageClub/Screens/Character/Appearance/Text_Appearance_CN.txt
@@ -38,9 +38,9 @@ Use this item
 使用该物品
 Unable to use due to player permissions
 因角色权限设定,无法使用
-Select a colour
+Select a color
 选择一种颜色
-Select colours
+Select colors
 选择颜色
 Unable to change color due to player permissions
 因玩家权限设定无法修改颜色
\ No newline at end of file
diff --git a/BondageClub/Screens/Character/Player/Dialog_Player.csv b/BondageClub/Screens/Character/Player/Dialog_Player.csv
index 2e347d9221..dec8b522dc 100644
--- a/BondageClub/Screens/Character/Player/Dialog_Player.csv
+++ b/BondageClub/Screens/Character/Player/Dialog_Player.csv
@@ -512,8 +512,8 @@ ActionDice,,,SourceCharacter rolls DiceType. The result is: DiceResult.,,
 ActionCoin,,,SourceCharacter flips a coin. The result is: CoinResult.,,
 ActionActivateSafewordRevert,,,SourceCharacter used her safeword. Please check for her well-being.,,
 ActionActivateSafewordRelease,,,SourceCharacter used her safeword and wants to be released. She is guided out of the room for her safety.,,
-ActionGrabbedForCell,,,"TargetCharacterName gets grabbed by two maids and locked in a timer cell, following her owner commands.",,
-ActionGrabbedForGGTS,,,"TargetCharacterName gets grabbed by two nurses wearing futuristic gear and locked in the Asylum for GGTS, following her owner commands.",,
+ActionGrabbedForCell,,,"TargetCharacterName gets grabbed by two maids and locked in a timer cell, following her owner's commands.",,
+ActionGrabbedForGGTS,,,"TargetCharacterName gets grabbed by two nurses wearing futuristic gear and locked in the Asylum for GGTS, following her owner's commands.",,
 ActionGrabbedToServeDrinks,,,TargetCharacterName gets grabbed by two maids and escorted to the maid quarters to serve drinks for her owner.,,
 ActionGiveEnvelopeToOwner,,,TargetCharacterName gives a sealed envelope to her owner.,,
 ActionActivitySpankItem,,,SourceCharacter hits DestinationCharacter FocusAssetGroup with a NextAsset.,,
diff --git a/BondageClub/Screens/Character/Player/Dialog_Player_CN.txt b/BondageClub/Screens/Character/Player/Dialog_Player_CN.txt
index 6f4d4365fc..aa2df3a74e 100644
--- a/BondageClub/Screens/Character/Player/Dialog_Player_CN.txt
+++ b/BondageClub/Screens/Character/Player/Dialog_Player_CN.txt
@@ -1059,8 +1059,8 @@ SourceCharacter used her safeword. Please check for her well-being.
 SourceCharacter used her safeword. Please check for her well-being.
 SourceCharacter used her safeword and wants to be released. She is guided out of the room for her safety.
 SourceCharacter used her safeword and wants to be released. She is guided out of the room for her safety.
-TargetCharacterName gets grabbed by two maids and locked in a timer cell, following her owner commands.
-TargetCharacterName gets grabbed by two maids and locked in a timer cell, following her owner commands.
+TargetCharacterName gets grabbed by two maids and locked in a timer cell, following her owner's commands.
+TargetCharacterName gets grabbed by two maids and locked in a timer cell, following her owner's commands.
 TargetCharacterName gets grabbed by two maids and escorted to the maid quarters to serve drinks for her owner.
 TargetCharacterName gets grabbed by two maids and escorted to the maid quarters to serve drinks for her owner.
 TargetCharacterName gives a sealed envelope to her owner.
diff --git a/BondageClub/Screens/Character/Player/Dialog_Player_DE.txt b/BondageClub/Screens/Character/Player/Dialog_Player_DE.txt
index f0d27ee543..462791d3ef 100644
--- a/BondageClub/Screens/Character/Player/Dialog_Player_DE.txt
+++ b/BondageClub/Screens/Character/Player/Dialog_Player_DE.txt
@@ -225,7 +225,7 @@ SourceCharacter rolls a DiceType sided dice.  The result is: DiceResult.
 SourceCharacter rollt einen DiceType-seitigen Würfel. Das Ergebnis ist: DiceResult.
 SourceCharacter flips a coin.  The result is: CoinResult.
 SourceCharacter wirft eine Münze. Das Ergebnis ist: CoinResult.
-TargetCharacterName gets grabbed by two maids and locked in a timer cell, following her owner commands.
+TargetCharacterName gets grabbed by two maids and locked in a timer cell, following her owner's commands.
 TargetCharacterName wird auf Befehl ihrer Besitzerin von zwei Hausmädchen gepackt und in eine Timer-Zelle gesperrt.
 TargetCharacterName gets grabbed by two maids and escorted to the maid quarters to serve drinks for her owner.
 TargetCharacterName wird von zwei Hausmädchen gepackt und in die Dienerkammer gebracht, um für ihre Besitzerin Getränke zu servieren.
diff --git a/BondageClub/Screens/Character/Player/Dialog_Player_FR.txt b/BondageClub/Screens/Character/Player/Dialog_Player_FR.txt
index f021ca9918..bbe42c8580 100644
--- a/BondageClub/Screens/Character/Player/Dialog_Player_FR.txt
+++ b/BondageClub/Screens/Character/Player/Dialog_Player_FR.txt
@@ -179,7 +179,7 @@ SourceCharacter rolls a DiceType sided dice.  The result is: DiceResult.
 SourceCharacter roule un dé à DiceType côtés. Le résultat est: DiceResult.
 SourceCharacter flips a coin.  The result is: CoinResult.
 SourceCharacter lance une pièce. Le résultat est: CoinResult.
-TargetCharacterName gets grabbed by two maids and locked in a timer cell, following her owner commands.
+TargetCharacterName gets grabbed by two maids and locked in a timer cell, following her owner's commands.
 TargetCharacterName est attrapée par deux servantes et enfermée dans une cellule minutée, selon l'ordre de sa patronne.
 TargetCharacterName gets grabbed by two maids and escorted to the maid quarters to serve drinks for her owner.
 TargetCharacterName est attrapée par deux servantes et escortée aux quartiers des servantes pour servir des brevages.
diff --git a/BondageClub/Screens/Character/Player/Dialog_Player_RU.txt b/BondageClub/Screens/Character/Player/Dialog_Player_RU.txt
index 1a6222d9e1..3d86903a5d 100644
--- a/BondageClub/Screens/Character/Player/Dialog_Player_RU.txt
+++ b/BondageClub/Screens/Character/Player/Dialog_Player_RU.txt
@@ -227,7 +227,7 @@ SourceCharacter rolls a DiceType sided dice.  The result is: DiceResult.
 SourceCharacter бросает кости.  В результате получается: DiceResult.
 SourceCharacter flips a coin.  The result is: CoinResult.
 SourceCharacter переворачивает монету.  Результат таков: CoinResult.
-TargetCharacterName gets grabbed by two maids and locked in a timer cell, following her owner commands.
+TargetCharacterName gets grabbed by two maids and locked in a timer cell, following her owner's commands.
 TargetCharacterName ее схватили две горничные и заперли в клетке с таймером, следуя командам ее хозяйки.
 TargetCharacterName gets grabbed by two maids and escorted to the maid quarters to serve drinks for her owner.
 TargetCharacterName ее схватили две горничные и сопроводили в комнату для прислуги, чтобы подать напитки для ее хозяйки.
diff --git a/BondageClub/Screens/Online/ChatAdmin/Text_ChatAdmin_RU.txt b/BondageClub/Screens/Online/ChatAdmin/Text_ChatAdmin_RU.txt
index e5063a5ceb..27f0e00cc7 100644
--- a/BondageClub/Screens/Online/ChatAdmin/Text_ChatAdmin_RU.txt
+++ b/BondageClub/Screens/Online/ChatAdmin/Text_ChatAdmin_RU.txt
@@ -31,4 +31,4 @@ This room name is already taken
 Account error, please try to relog
 Ошибка учетной записи, пожалуйста, попробуйте перерегистрироватся
 Invalid chat room data detected
-Обнаружены недопустимые данные чата комнаты 
+Обнаружены недопустимые данные чата комнаты
diff --git a/BondageClub/Screens/Online/ChatCreate/Text_ChatCreate_RU.txt b/BondageClub/Screens/Online/ChatCreate/Text_ChatCreate_RU.txt
index 38c70b7c48..73fe9f5981 100644
--- a/BondageClub/Screens/Online/ChatCreate/Text_ChatCreate_RU.txt
+++ b/BondageClub/Screens/Online/ChatCreate/Text_ChatCreate_RU.txt
@@ -1,5 +1,5 @@
 Enter your room information
-Введите информацию о комнате 
+Введите информацию о комнате
 Room Name (Letters & numbers only)
 Имя Комнаты (Только буквы и цифры )
 A short description or what's going on
@@ -11,7 +11,7 @@ Select the background
 Introduction
 Вступление
 Kidnappers League
-Лига Похитителей 
+Лига Похитителей
 Maid Quarters
 Помещение для прислуги
 Main Hall
diff --git a/BondageClub/Screens/Online/ChatRoom/Text_ChatRoom.csv b/BondageClub/Screens/Online/ChatRoom/Text_ChatRoom.csv
index 58bcb6b60e..30f8bfea74 100644
--- a/BondageClub/Screens/Online/ChatRoom/Text_ChatRoom.csv
+++ b/BondageClub/Screens/Online/ChatRoom/Text_ChatRoom.csv
@@ -20,8 +20,8 @@ CommandHelp,<strong>Help: KeyWord</strong>
 CommandNoSuchCommand,command: no such command
 CommandPrerequisiteFailed,command: prerequisite check failed
 CommandHelpMissing,HELP IS MISSING
-CommandFriendlist,Friendlist: 
-CommandGhostlist,Ghostlist: 
-CommandWhitelist,Whitelist: 
-CommandBlacklist,Blacklist: 
-GGTSIntro,(Two nurses wearing futuristic gear grabs you and carry you to the Asylum.  Another nurse is waiting for you there.)  Welcome.  Don't be scared.
+CommandFriendlist,Friendlist:
+CommandGhostlist,Ghostlist:
+CommandWhitelist,Whitelist:
+CommandBlacklist,Blacklist:
+GGTSIntro,(Two nurses wearing futuristic gear grab you and carry you to the Asylum.  Another nurse is waiting for you there.)  Welcome.  Don't be scared.
diff --git a/BondageClub/Screens/Online/ChatRoom/Text_ChatRoom_CN.txt b/BondageClub/Screens/Online/ChatRoom/Text_ChatRoom_CN.txt
index d33ebc5c9b..040badef7a 100644
--- a/BondageClub/Screens/Online/ChatRoom/Text_ChatRoom_CN.txt
+++ b/BondageClub/Screens/Online/ChatRoom/Text_ChatRoom_CN.txt
@@ -42,11 +42,11 @@ command: prerequisite check failed
 command:发送前检查失败
 HELP IS MISSING
 帮助不见啦!!!
-Friendlist: 
+Friendlist:
 好友列表:
-Ghostlist: 
+Ghostlist:
 忽视列表:
-Whitelist: 
+Whitelist:
 白名单:
-Blacklist: 
+Blacklist:
 黑名单:
diff --git a/BondageClub/Screens/Room/AsylumEntrance/AsylumEntrance.js b/BondageClub/Screens/Room/AsylumEntrance/AsylumEntrance.js
index 43f9ada0b1..50a678bdf6 100644
--- a/BondageClub/Screens/Room/AsylumEntrance/AsylumEntrance.js
+++ b/BondageClub/Screens/Room/AsylumEntrance/AsylumEntrance.js
@@ -144,7 +144,7 @@ function AsylumEntranceWearPatientClothes(C, ExtraEvent) {
 	}
 	InventoryRemove(C, "HairAccessory3");
 	InventoryRemove(C, "Hat");
-	
+
 	// Wears the GGTS items based on the player level
 	if (ExtraEvent && LogQuery("Isolated", "Asylum")) {
 		CharacterRelease(C);
diff --git a/BondageClub/Scripts/ControllerSupport.js b/BondageClub/Scripts/ControllerSupport.js
index 8785a7e90e..4debe47d9a 100644
--- a/BondageClub/Scripts/ControllerSupport.js
+++ b/BondageClub/Scripts/ControllerSupport.js
@@ -31,7 +31,7 @@ var ControllerDeadZone = 0.01;
 
 
 /**
- *removes all buttons from the lists 
+ *removes all buttons from the lists
  */
 function ClearButtons() {
 	ControllerButtonsX = [];
@@ -432,7 +432,7 @@ function ControllerButton(buttons) {
 
 //uncomment to test it with keyboard
 /**
- * handles keyboard inputs in controller mode 
+ * handles keyboard inputs in controller mode
  * @returns {void} Nothing
  */
 function ControllerSupportKeyDown() {
diff --git a/C000_Intro/ChapterSelect/Script.js b/C000_Intro/ChapterSelect/Script.js
index 11fdc4bbbe..fde0f9b795 100644
--- a/C000_Intro/ChapterSelect/Script.js
+++ b/C000_Intro/ChapterSelect/Script.js
@@ -4,7 +4,7 @@ var C000_Intro_ChapterSelect_CreditPosition = 0;
 var C000_Intro_ChapterSelect_Credits = [];
 var C000_Intro_ChapterSelect_CreditActors = ["Player", "Amanda", "Sarah", "Sidney", "Jennifer", "Julia", "Yuki"];
 var C000_Intro_ChapterSelect_ThankYouCount = 999999;
-var C000_Intro_ChapterSelect_ThankYouList = ["Alvin", "Bryce", "Christian", "Designated", "Dick", "Escurse", "EugeneTooms", "James", "Jenni", "Jyeoh", "Karel", "Kitten", "Laioken", "Michal", "Mindtie", 
+var C000_Intro_ChapterSelect_ThankYouList = ["Alvin", "Bryce", "Christian", "Designated", "Dick", "Escurse", "EugeneTooms", "James", "Jenni", "Jyeoh", "Karel", "Kitten", "Laioken", "Michal", "Mindtie",
 											"MunchyCat", "Nick", "Overlord", "Rashiash", "Ryner", "Setsu95", "Shadow", "Shaun", "Simeon", "Sky", "Terry", "Victor", "William", "Winterisbest", "Xepherio"];
 var C000_Intro_ChapterSelect_ThankYouCurrent = -1;
 var C000_Intro_ChapterSelect_CreditTextColor = "black";
@@ -18,7 +18,7 @@ function C000_Intro_ChapterSelect_Load() {
 	StopTimer(7.6666667 * 60 * 60 * 1000);
 }
 
-// Draw the credits 
+// Draw the credits
 function C000_Intro_ChapterSelect_DrawCredits() {
 
 	// For each credits in the list
@@ -58,7 +58,7 @@ function C000_Intro_ChapterSelect_DrawCredits() {
 
 // Draw the thank you image
 function C000_Intro_ChapterSelect_DrawThankYou() {
-	
+
 	// If the image must swap
 	if (C000_Intro_ChapterSelect_ThankYouCount >= 200) {
 		var NewThankYou = C000_Intro_ChapterSelect_ThankYouCurrent;
@@ -87,7 +87,7 @@ function C000_Intro_ChapterSelect_Run() {
 }
 
 // Chapter Select Click (Clicking on the image will swap it)
-function C000_Intro_ChapterSelect_Click() {	
+function C000_Intro_ChapterSelect_Click() {
 	ClickInteraction(C000_Intro_ChapterSelect_CurrentStage);
 	if (!C000_Intro_ChapterSelect_CreditMode && (MouseX >= 600) && (MouseX <= 1200) && (MouseY >= 0) && (MouseY <= 599)) C000_Intro_ChapterSelect_ThankYouCount = 999999;
 	StopTimer(7.6666667 * 60 * 60 * 1000);
diff --git a/C002_FirstClass/Amanda/Script.js b/C002_FirstClass/Amanda/Script.js
index 15eac75ed1..45d77ba104 100644
--- a/C002_FirstClass/Amanda/Script.js
+++ b/C002_FirstClass/Amanda/Script.js
@@ -11,7 +11,7 @@ var C002_FirstClass_Amanda_KissSarahDone = false;
 // Chapter 2 - Amanda Load
 function C002_FirstClass_Amanda_Load() {
 
-	// Load the scene parameters	
+	// Load the scene parameters
 	ActorLoad("Amanda", "Classroom");
 	LoadInteractions();
 	if (C002_FirstClass_Classroom_MildredSubdueSuccess) C002_FirstClass_Amanda_BowRemarkReady = false;
@@ -22,7 +22,7 @@ function C002_FirstClass_Amanda_Load() {
 		if ((parseInt(C002_FirstClass_Amanda_CurrentStage) < 100) && (C002_FirstClass_Classroom_MildredSubdueSuccess)) C002_FirstClass_Amanda_SubdueRemarkReady = true;
 		C002_FirstClass_Amanda_CurrentStage = C002_FirstClass_Classroom_CalcStage();
 	}
-	
+
 	// The remark cannot be done if the player is gagged, also calculate the bondage hug
 	if (Common_PlayerGagged) C002_FirstClass_Amanda_SubdueRemarkReady = false;
 	C002_FirstClass_Amanda_BondageHugReady = ((C002_FirstClass_Amanda_CurrentStage > 100) && (Common_PlayerNotRestrained) && (Common_PlayerNotGagged) && (C002_FirstClass_Classroom_MildredSubdueSuccess) && (ActorSpecificHasInventory("Amanda", "Rope")) && (ActorSpecificHasInventory("Sarah", "Rope")));
@@ -31,23 +31,23 @@ function C002_FirstClass_Amanda_Load() {
 
 // Chapter 2 - Amanda Run
 function C002_FirstClass_Amanda_Run() {
-	
+
 	// Regular interactions
 	BuildInteraction(C002_FirstClass_Amanda_CurrentStage);
-	
+
 	// Bondage hug
 	if ((C002_FirstClass_Amanda_CurrentStage == 160) || (C002_FirstClass_Amanda_CurrentStage == 170)) {
 		OverridenIntroImage = "";
 		if ((ActorSpecificHasInventory("Amanda", "BallGag")) && (ActorSpecificHasInventory("Sarah", "BallGag"))) OverridenIntroImage = "Hug_Amanda_Rope_BallGag_Sarah_Rope_BallGag.jpg";
 		if ((ActorSpecificHasInventory("Amanda", "BallGag")) && (!ActorSpecificHasInventory("Sarah", "BallGag"))) OverridenIntroImage = "Hug_Amanda_Rope_BallGag_Sarah_Rope.jpg";
 		if ((!ActorSpecificHasInventory("Amanda", "BallGag")) && (ActorSpecificHasInventory("Sarah", "BallGag"))) OverridenIntroImage = "Hug_Amanda_Rope_Sarah_Rope_BallGag.jpg";
-		if ((!ActorSpecificHasInventory("Amanda", "BallGag")) && (!ActorSpecificHasInventory("Sarah", "BallGag"))) OverridenIntroImage = "Hug_Amanda_Rope_Sarah_Rope.jpg";		
+		if ((!ActorSpecificHasInventory("Amanda", "BallGag")) && (!ActorSpecificHasInventory("Sarah", "BallGag"))) OverridenIntroImage = "Hug_Amanda_Rope_Sarah_Rope.jpg";
 	}
-	
+
 }
 
 // Chapter 2 - Amanda Click
-function C002_FirstClass_Amanda_Click() {	
+function C002_FirstClass_Amanda_Click() {
 
 	// Keep the stage on entry
 	var EntryStage = C002_FirstClass_Amanda_CurrentStage;
@@ -55,7 +55,7 @@ function C002_FirstClass_Amanda_Click() {
 	// Regular interactions
 	ClickInteraction(C002_FirstClass_Amanda_CurrentStage);
 	var ClickedInv = GetClickedInventory();
-	
+
 	// If the player wants to gag Amanda
 	if ((C002_FirstClass_Amanda_CurrentStage >= 100) && (ClickedInv == "BallGag") && (ActorHasInventory("BallGag") == false) && (Common_PlayerNotRestrained)) {
 		if ((ActorGetValue(ActorSubmission) >= 2) || (ActorHasInventory("Rope")) || (ActorHasInventory("Cuffs"))) {
@@ -111,7 +111,7 @@ function C002_FirstClass_Amanda_Click() {
 		if (C002_FirstClass_Amanda_CropDone == false) { C002_FirstClass_Amanda_CropDone = true; ActorChangeAttitude(-2, 0); }
 		CurrentTime = CurrentTime + 60000;
 	}
-	
+
 	// If the stage changed, we remove the Overridden image, also check for the bondage hug
 	if (EntryStage != C002_FirstClass_Amanda_CurrentStage) OverridenIntroImage = "";
 	C002_FirstClass_Amanda_BondageHugReady = ((C002_FirstClass_Amanda_CurrentStage > 100) && (Common_PlayerNotRestrained) && (Common_PlayerNotGagged) && (C002_FirstClass_Classroom_MildredSubdueSuccess) && (ActorSpecificHasInventory("Amanda", "Rope")) && (ActorSpecificHasInventory("Sarah", "Rope")));
@@ -153,9 +153,9 @@ function C002_FirstClass_Amanda_AgreeHelp() {
 	C002_FirstClass_Classroom_AmandaAgree = true;
 }
 
-// Chapter 2 - Amanda Bondage Hug 
+// Chapter 2 - Amanda Bondage Hug
 function C002_FirstClass_Amanda_BondageHug() {
-	if (C002_FirstClass_Amanda_BondageHugDone == false) { 
+	if (C002_FirstClass_Amanda_BondageHugDone == false) {
 		C002_FirstClass_Amanda_BondageHugDone = true;
 		ActorChangeAttitude(1, 0);
 	}
diff --git a/C002_FirstClass/Sarah/Script.js b/C002_FirstClass/Sarah/Script.js
index 5bab75a802..0a66206633 100644
--- a/C002_FirstClass/Sarah/Script.js
+++ b/C002_FirstClass/Sarah/Script.js
@@ -13,7 +13,7 @@ function C002_FirstClass_Sarah_CalcStage() {
 	// Keep the backup stage to resume conversation
 	var EntryStage = C002_FirstClass_Sarah_CurrentStage;
 	if (C002_FirstClass_Sarah_CurrentStage < 100) C002_FirstClass_Sarah_BackupStage = C002_FirstClass_Sarah_CurrentStage;
-	
+
 	// Calculate the correct stage (100 comes back to the previous conversation)
 	if (C002_FirstClass_Sarah_CurrentStage <= 150) {
 		C002_FirstClass_Sarah_CurrentStage = C002_FirstClass_Classroom_CalcStage();
@@ -22,7 +22,7 @@ function C002_FirstClass_Sarah_CalcStage() {
 
 	// If the stage changed, we scrap the Overridden image
 	if (EntryStage != C002_FirstClass_Sarah_CurrentStage) OverridenIntroImage = "";
-	
+
 	// The bondage hug is only available if Amanda and Sarah are in ropes
 	C002_FirstClass_Sarah_BondageHugReady = ((C002_FirstClass_Sarah_CurrentStage > 100) && (C002_FirstClass_Sarah_CurrentStage < 200) && (Common_PlayerNotRestrained) && (Common_PlayerNotGagged) && (C002_FirstClass_Classroom_MildredSubdueSuccess) && (ActorSpecificHasInventory("Amanda", "Rope")) && (ActorSpecificHasInventory("Sarah", "Rope")));
 
@@ -34,13 +34,13 @@ function C002_FirstClass_Sarah_CalcStage() {
 		if ((!ActorSpecificHasInventory("Amanda", "BallGag")) && (ActorSpecificHasInventory("Sarah", "BallGag"))) OverridenIntroImage = "Hug_Amanda_Rope_Sarah_Rope_BallGag.jpg";
 		if ((!ActorSpecificHasInventory("Amanda", "BallGag")) && (!ActorSpecificHasInventory("Sarah", "BallGag"))) OverridenIntroImage = "Hug_Amanda_Rope_Sarah_Rope.jpg";
 	}
-	
+
 }
 
 // Chapter 2 - Sarah Load
 function C002_FirstClass_Sarah_Load() {
 
-	// Load the scene parameters	
+	// Load the scene parameters
 	ActorLoad("Sarah", "Classroom");
 	LoadInteractions();
 
@@ -64,7 +64,7 @@ function C002_FirstClass_Sarah_Run() {
 }
 
 // Chapter 2 - Sarah Click
-function C002_FirstClass_Sarah_Click() {	
+function C002_FirstClass_Sarah_Click() {
 
 	// Regular interactions
 	ClickInteraction(C002_FirstClass_Sarah_CurrentStage);
@@ -115,7 +115,7 @@ function C002_FirstClass_Sarah_Click() {
 
 	// Recalculate the stage
 	C002_FirstClass_Sarah_CalcStage();
-	
+
 }
 
 // Chapter 2 - Sarah Ungag
@@ -141,7 +141,7 @@ function C002_FirstClass_Sarah_AnnoyMildred() {
 	ActorAddInventory("BallGag");
 }
 
-// Chapter 2 - Sarah Bondage Hug 
+// Chapter 2 - Sarah Bondage Hug
 function C002_FirstClass_Sarah_BondageHug() {
 	C002_FirstClass_Sarah_CalcStage();
 	if (C002_FirstClass_Sarah_BondageHugDone == false) { C002_FirstClass_Sarah_BondageHugDone = true; ActorChangeAttitude(1, 0); }
diff --git a/C002_FirstClass/SarahIntro/Script.js b/C002_FirstClass/SarahIntro/Script.js
index 9f42b2db88..ed30f4a4aa 100644
--- a/C002_FirstClass/SarahIntro/Script.js
+++ b/C002_FirstClass/SarahIntro/Script.js
@@ -7,14 +7,14 @@ function C002_FirstClass_SarahIntro_Load() {
 	// Skip the intro if Mildred was subdued, else we stop the time and show the intro
 	if (C002_FirstClass_Classroom_MildredSubdueSuccess)
 		SetScene(CurrentChapter, "Classroom");
-	else 
+	else
 		StopTimer(8.5 * 60 * 60 * 1000);
-	
+
 }
 
 // Chapter 2 - SarahIntro Run
 function C002_FirstClass_SarahIntro_Run() {
-	
+
 	// Paints the background
 	if (ActorSpecificHasInventory("Amanda", "BallGag"))
 		DrawImage(CurrentChapter + "/" + CurrentScreen + "/Background_AmandaGag.jpg", 0, 0);
@@ -27,7 +27,7 @@ function C002_FirstClass_SarahIntro_Run() {
 	if (TextPhase >= 2) DrawText(GetText("Intro3"), 600, 300, "White");
 	if (TextPhase >= 3) DrawText(GetText("Intro4"), 600, 400, "White");
 	if (TextPhase >= 4) DrawText(GetText("Intro5"), 600, 500, "White");
-		
+
 }
 
 // Chapter 2 - SarahIntro Click
diff --git a/C012_AfterClass/RockShow/Script.js b/C012_AfterClass/RockShow/Script.js
index 1eb8139d3e..7f308238c7 100644
--- a/C012_AfterClass/RockShow/Script.js
+++ b/C012_AfterClass/RockShow/Script.js
@@ -9,7 +9,7 @@ var C012_AfterClass_RockShow_SearchDone = false;
 
 // Chapter 12 After Class - Rock Show Load
 function C012_AfterClass_RockShow_Load() {
-	
+
 	// Loads the scene to search in the wardrobe
 	LoadInteractions();
 	ActorLoad("Sidney", "");
@@ -31,16 +31,16 @@ function C012_AfterClass_RockShow_Load() {
 function C012_AfterClass_RockShow_Run() {
 	BuildInteraction(C012_AfterClass_RockShow_CurrentStage);
 	if (parseInt(C012_AfterClass_RockShow_CurrentStage) >= 200) {
-		DrawActor(CurrentActor, 680, 0, 1);	
+		DrawActor(CurrentActor, 680, 0, 1);
 		DrawActor("Player", 500, 0, 1);
 	} else {
 		DrawActor("Player", 500, 0, 1);
-		DrawActor(CurrentActor, 680, 0, 1);		
+		DrawActor(CurrentActor, 680, 0, 1);
 	}
 }
 
 // Chapter 12 After Class - Rock Show Click
-function C012_AfterClass_RockShow_Click() {	
+function C012_AfterClass_RockShow_Click() {
 
 	// Regular interactions
 	ClickInteraction(C012_AfterClass_RockShow_CurrentStage);
@@ -61,7 +61,7 @@ function C012_AfterClass_RockShow_Wait(WaitTime) {
 
 // Chapter 12 After Class - When the player listens until the next song
 function C012_AfterClass_RockShow_NextSong() {
-	
+
 	// The more songs, the more Sidney will like the player
 	C012_AfterClass_RockShow_SongCount++;
 	CurrentTime = CurrentTime + 290000;
@@ -110,7 +110,7 @@ function C012_AfterClass_RockShow_MasturbatePlayer() {
 	}
 }
 
-// Chapter 12 After Class - When the player masturbates Sidney 
+// Chapter 12 After Class - When the player masturbates Sidney
 function C012_AfterClass_RockShow_MasturbateSidney(Factor) {
 	C012_AfterClass_RockShow_MasturbateCount = C012_AfterClass_RockShow_MasturbateCount + Factor;
 	if (C012_AfterClass_RockShow_MasturbateCount < 0) C012_AfterClass_RockShow_MasturbateCount = 0;
diff --git a/C101_KinbakuClub/ClubRoom3/Script.js b/C101_KinbakuClub/ClubRoom3/Script.js
index e26df9ad18..eac96a4efb 100644
--- a/C101_KinbakuClub/ClubRoom3/Script.js
+++ b/C101_KinbakuClub/ClubRoom3/Script.js
@@ -7,18 +7,18 @@ function C101_KinbakuClub_ClubRoom3_Load() {
 // Chapter  101 - Club Room 3 Run
 function C101_KinbakuClub_ClubRoom3_Run() {
 
-	// Draw the background image 
+	// Draw the background image
 	DrawImage(CurrentChapter + "/" + CurrentScreen + "/ClubRoom3Arrows.jpg", 0, 0);
-	
+
 	// Draw Chloe
 	//if (C101_KinbakuClub_Chloe_CurrentStage == 0) {
 		DrawImage(CurrentChapter + "/" + CurrentScreen + "/ChloeBoard.png", 0, 0);
 	//}	else DrawActor("Chloe", 220, 170, 0.3333);
-	
-	
+
+
 	// Draw CardGamers
 	DrawImage(CurrentChapter + "/" + CurrentScreen + "/CardGamers1.jpg", 570, 130);
-	
+
 }
 
 // Chapter 101 - Club Room 3 Click
diff --git a/C101_KinbakuClub/ClubRoom4/Script.js b/C101_KinbakuClub/ClubRoom4/Script.js
index 8439f2242a..9baded7798 100644
--- a/C101_KinbakuClub/ClubRoom4/Script.js
+++ b/C101_KinbakuClub/ClubRoom4/Script.js
@@ -7,7 +7,7 @@ function C101_KinbakuClub_ClubRoom4_Load() {
 // Chapter  101 - Club Room 4 Run
 function C101_KinbakuClub_ClubRoom4_Run() {
 
-	// Draw the background image 
+	// Draw the background image
 	DrawImage(CurrentChapter + "/" + CurrentScreen + "/ClubRoom4.jpg", 0, 0);
 
 	// Draw movement arrows
@@ -15,7 +15,7 @@ function C101_KinbakuClub_ClubRoom4_Run() {
 		DrawImage(CurrentChapter + "/" + CurrentScreen + "/ClubRoom4ArrowLeft.jpg", 20, 525);
 		DrawImage(CurrentChapter + "/" + CurrentScreen + "/ClubRoom4ArrowRight.jpg", 1090, 525);
 	}
-	
+
 	// Draw the player when she is a slave
 	if (PlayerHasLockedInventory("Manacles")) {
 		DrawImage(CurrentChapter + "/" + CurrentScreen + "/SlavesPlayer.png", 280, 185);
@@ -133,7 +133,7 @@ function C101_KinbakuClub_ClubRoom4_Click() {
 			C101_KinbakuClub_Slaves_CurrentStage = 120;
 		}
 	}
-	
+
 	// When Chloe is a slave and the user clicks on her
 
 	// When a twin is a slave and the user clicks on her
diff --git a/C101_KinbakuClub/Discipline/Script.js b/C101_KinbakuClub/Discipline/Script.js
index 733d7d4d5b..0180c03c2b 100644
--- a/C101_KinbakuClub/Discipline/Script.js
+++ b/C101_KinbakuClub/Discipline/Script.js
@@ -1,6 +1,6 @@
 // Chapter 101 - Kinbaku Club Load
 function C101_KinbakuClub_Discipline_Load() {
-	
+
 	// Time is always 17:25:00 in the outro, unlock if needed
 	StopTimer(17.25 * 60 * 60 * 1000, CurrentChapter, "Discipline");
 }
@@ -8,7 +8,7 @@ function C101_KinbakuClub_Discipline_Load() {
 // Chapter 7 - Kinbaku Club Run
 function C101_KinbakuClub_Discipline_Run() {
 
-	// Paints the background	
+	// Paints the background
 	DrawRect(0, 0, 800, 600, "black");
 	if (PlayerHasLockedInventory("Manacles")) DrawImage(CurrentChapter + "/" + CurrentScreen + "/BagBlackSlave.jpg", 800, 0);
 	else {
@@ -44,7 +44,7 @@ function C101_KinbakuClub_Discipline_Click() {
 
 	// Jump to the next animation
 	TextPhase++;
-			
+
 	// Jump to lunch on phase 3
 	//if (TextPhase >= 4) SaveMenu("C102_KinbakuDiscipline", "Intro");
 
diff --git a/C999_Common/Armbinder/Text_EN.csv b/C999_Common/Armbinder/Text_EN.csv
index be22d81209..95c95b62ba 100644
--- a/C999_Common/Armbinder/Text_EN.csv
+++ b/C999_Common/Armbinder/Text_EN.csv
@@ -1,2 +1,2 @@
 Tag,Content
-BadTiming,You fantasizes about tying yourself up but realize|that it might not be the best time for that.
+BadTiming,You fantasize about tying yourself up but realize|that it might not be the best time for that.
diff --git a/C999_Common/BallGag/Text_EN.csv b/C999_Common/BallGag/Text_EN.csv
index 63bb551e2b..93239c973e 100644
--- a/C999_Common/BallGag/Text_EN.csv
+++ b/C999_Common/BallGag/Text_EN.csv
@@ -1,2 +1,2 @@
 Tag,Content
-BadTiming,You fantasizes about being gagged but realize that|it might not be the best time to gag yourself.
+BadTiming,You fantasize about being gagged but realize that|it might not be the best time to gag yourself.
diff --git a/C999_Common/Blindfold/Text_EN.csv b/C999_Common/Blindfold/Text_EN.csv
index 543aca5b1e..fe678b1a5e 100644
--- a/C999_Common/Blindfold/Text_EN.csv
+++ b/C999_Common/Blindfold/Text_EN.csv
@@ -1,2 +1,2 @@
 Tag,Content
-BadTiming,You fantasizes about being blinded but realize that|it might not be the best time to wear it.
+BadTiming,You fantasize about being blinded but realize that|it might not be the best time to wear it.
diff --git a/C999_Common/ChastityBelt/Text_EN.csv b/C999_Common/ChastityBelt/Text_EN.csv
index d05f61ab69..030cb99951 100644
--- a/C999_Common/ChastityBelt/Text_EN.csv
+++ b/C999_Common/ChastityBelt/Text_EN.csv
@@ -1,3 +1,3 @@
 Tag,Content
 ConfirmLock,Are you sure you want to lock the|belt on yourself?  Click again to do so.
-BadTiming,You fantasizes about being locked in a chastity|belt but it might not be the best time for that.
+BadTiming,You fantasize about being locked in a chastity|belt but it might not be the best time for that.
diff --git a/C999_Common/ClothGag/Text_EN.csv b/C999_Common/ClothGag/Text_EN.csv
index 63bb551e2b..93239c973e 100644
--- a/C999_Common/ClothGag/Text_EN.csv
+++ b/C999_Common/ClothGag/Text_EN.csv
@@ -1,2 +1,2 @@
 Tag,Content
-BadTiming,You fantasizes about being gagged but realize that|it might not be the best time to gag yourself.
+BadTiming,You fantasize about being gagged but realize that|it might not be the best time to gag yourself.
diff --git a/C999_Common/Collar/Text_EN.csv b/C999_Common/Collar/Text_EN.csv
index 72767b5c2c..a9ab25635d 100644
--- a/C999_Common/Collar/Text_EN.csv
+++ b/C999_Common/Collar/Text_EN.csv
@@ -1,3 +1,3 @@
 Tag,Content
-BadTiming,You fantasizes about being collared but realize that|it might not be the best time to collar yourself.
+BadTiming,You fantasize about being collared but realize that|it might not be the best time to collar yourself.
 LockedCollar,Then collar is fastened with a padlock.|You will need the key to remove it.
diff --git a/C999_Common/Cuffs/Text_EN.csv b/C999_Common/Cuffs/Text_EN.csv
index ce5707d457..de3d99d317 100644
--- a/C999_Common/Cuffs/Text_EN.csv
+++ b/C999_Common/Cuffs/Text_EN.csv
@@ -1,3 +1,3 @@
 Tag,Content
-BadTiming,You fantasizes about being cuffed but realize that|it might not be the best time to cuff yourself.
+BadTiming,You fantasize about being cuffed but realize that|it might not be the best time to cuff yourself.
 NoShim,Without a hair clip or similar to make|a shim it is no use. You remain handcuffed.
diff --git a/C999_Common/DoubleOpenGag/Text_EN.csv b/C999_Common/DoubleOpenGag/Text_EN.csv
index 63bb551e2b..93239c973e 100644
--- a/C999_Common/DoubleOpenGag/Text_EN.csv
+++ b/C999_Common/DoubleOpenGag/Text_EN.csv
@@ -1,2 +1,2 @@
 Tag,Content
-BadTiming,You fantasizes about being gagged but realize that|it might not be the best time to gag yourself.
+BadTiming,You fantasize about being gagged but realize that|it might not be the best time to gag yourself.
diff --git a/C999_Common/Manacles/Intro_EN.csv b/C999_Common/Manacles/Intro_EN.csv
index 696f9261eb..e75cd0e337 100644
--- a/C999_Common/Manacles/Intro_EN.csv
+++ b/C999_Common/Manacles/Intro_EN.csv
@@ -1,3 +1,3 @@
 Stage,LoveReq,SubReq,VarReq,IntroText,Image
-0,0,0,,"This set of steel manacles for restraining|someones neck, wrists and ankles.",Manacles.jpg
+0,0,0,,"This set of steel manacles for restraining|someone's neck, wrists and ankles.",Manacles.jpg
 10,0,0,,"Without a key, there's no way to escape|the manacles cold hard snare.",Manacles.jpg
diff --git a/C999_Common/Manacles/Text_EN.csv b/C999_Common/Manacles/Text_EN.csv
index 32abc31737..de35c0a63d 100644
--- a/C999_Common/Manacles/Text_EN.csv
+++ b/C999_Common/Manacles/Text_EN.csv
@@ -1,2 +1,2 @@
 Tag,Content
-BadTiming,You fantasizes about shackling yourself up but realize|that it might not be the best time for that.
+BadTiming,You fantasize about shackling yourself up but realize|that it might not be the best time for that.
diff --git a/C999_Common/PantieGag/Stage_CN.csv b/C999_Common/PantieGag/Stage_CN.csv
index 33f3bdf8bb..03e1d45c02 100644
--- a/C999_Common/PantieGag/Stage_CN.csv
+++ b/C999_Common/PantieGag/Stage_CN.csv
@@ -1,8 +1,8 @@
 Stage,LoveReq,SubReq,VarReq,Interaction,Result,NextStage,LoveMod,SubMod,Function
-0,0,0,,(Inspect the panties.)ADD_MINUTES:1,"The lable size is XXXL.  Far too big for you to wear,|but large enough to fill the biggest of mouths.",0,0,0,
+0,0,0,,(Inspect the panties.)ADD_MINUTES:1,"The label size is XXXL.  Far too big for you to wear,|but large enough to fill the biggest of mouths.",0,0,0,
 0,0,0,Common_PlayerNotRestrained,(Gag yourself.)ADD_MINUTES:1,"You ball up the panties and cram them|into your mouth, packing it full.",10,0,0,SelfGag()
-10,0,0,HasLoosePantieGag,(Inspect the loose gag.)ADD_MINUTES:1,"The lable size is XXXL.  Far too big for you to wear,|but large enough to fill the biggest of mouths.",10,0,0,ShowImage()
+10,0,0,HasLoosePantieGag,(Inspect the loose gag.)ADD_MINUTES:1,"The label size is XXXL.  Far too big for you to wear,|but large enough to fill the biggest of mouths.",10,0,0,ShowImage()
 10,0,0,,(Chew on the panties.)ADD_MINUTES:1,You chew on the wad of panties.|They slowly become soaked by your own drool.,10,0,0,
-10,0,0,,(Suck on the panties.)ADD_MINUTES:1,"You suck on the pantie wad, savouting the taste|and wondering how clean they were.",10,0,0,
+10,0,0,,(Suck on the panties.)ADD_MINUTES:1,"You suck on the pantie wad, savoring the taste|and wondering how clean they were.",10,0,0,
 10,0,0,!HasOtherGag,(Spit out the panties.)ADD_MINUTES:1,You spit the soaked wad of panties out|of your mouth and can now talk again.,0,0,0,SelfUngag()
 10,0,0,HasOtherGag,(Spit out the panties.)ADD_MINUTES:1,"You try to spit the panties out, but the other gag has|them trapped.  You'll need to remove that first.",10,0,0,
diff --git a/C999_Common/PantieGag/Stage_EN.csv b/C999_Common/PantieGag/Stage_EN.csv
index 33f3bdf8bb..03e1d45c02 100644
--- a/C999_Common/PantieGag/Stage_EN.csv
+++ b/C999_Common/PantieGag/Stage_EN.csv
@@ -1,8 +1,8 @@
 Stage,LoveReq,SubReq,VarReq,Interaction,Result,NextStage,LoveMod,SubMod,Function
-0,0,0,,(Inspect the panties.)ADD_MINUTES:1,"The lable size is XXXL.  Far too big for you to wear,|but large enough to fill the biggest of mouths.",0,0,0,
+0,0,0,,(Inspect the panties.)ADD_MINUTES:1,"The label size is XXXL.  Far too big for you to wear,|but large enough to fill the biggest of mouths.",0,0,0,
 0,0,0,Common_PlayerNotRestrained,(Gag yourself.)ADD_MINUTES:1,"You ball up the panties and cram them|into your mouth, packing it full.",10,0,0,SelfGag()
-10,0,0,HasLoosePantieGag,(Inspect the loose gag.)ADD_MINUTES:1,"The lable size is XXXL.  Far too big for you to wear,|but large enough to fill the biggest of mouths.",10,0,0,ShowImage()
+10,0,0,HasLoosePantieGag,(Inspect the loose gag.)ADD_MINUTES:1,"The label size is XXXL.  Far too big for you to wear,|but large enough to fill the biggest of mouths.",10,0,0,ShowImage()
 10,0,0,,(Chew on the panties.)ADD_MINUTES:1,You chew on the wad of panties.|They slowly become soaked by your own drool.,10,0,0,
-10,0,0,,(Suck on the panties.)ADD_MINUTES:1,"You suck on the pantie wad, savouting the taste|and wondering how clean they were.",10,0,0,
+10,0,0,,(Suck on the panties.)ADD_MINUTES:1,"You suck on the pantie wad, savoring the taste|and wondering how clean they were.",10,0,0,
 10,0,0,!HasOtherGag,(Spit out the panties.)ADD_MINUTES:1,You spit the soaked wad of panties out|of your mouth and can now talk again.,0,0,0,SelfUngag()
 10,0,0,HasOtherGag,(Spit out the panties.)ADD_MINUTES:1,"You try to spit the panties out, but the other gag has|them trapped.  You'll need to remove that first.",10,0,0,
diff --git a/C999_Common/PantieGag/Stage_FR.csv b/C999_Common/PantieGag/Stage_FR.csv
index 33f3bdf8bb..03e1d45c02 100644
--- a/C999_Common/PantieGag/Stage_FR.csv
+++ b/C999_Common/PantieGag/Stage_FR.csv
@@ -1,8 +1,8 @@
 Stage,LoveReq,SubReq,VarReq,Interaction,Result,NextStage,LoveMod,SubMod,Function
-0,0,0,,(Inspect the panties.)ADD_MINUTES:1,"The lable size is XXXL.  Far too big for you to wear,|but large enough to fill the biggest of mouths.",0,0,0,
+0,0,0,,(Inspect the panties.)ADD_MINUTES:1,"The label size is XXXL.  Far too big for you to wear,|but large enough to fill the biggest of mouths.",0,0,0,
 0,0,0,Common_PlayerNotRestrained,(Gag yourself.)ADD_MINUTES:1,"You ball up the panties and cram them|into your mouth, packing it full.",10,0,0,SelfGag()
-10,0,0,HasLoosePantieGag,(Inspect the loose gag.)ADD_MINUTES:1,"The lable size is XXXL.  Far too big for you to wear,|but large enough to fill the biggest of mouths.",10,0,0,ShowImage()
+10,0,0,HasLoosePantieGag,(Inspect the loose gag.)ADD_MINUTES:1,"The label size is XXXL.  Far too big for you to wear,|but large enough to fill the biggest of mouths.",10,0,0,ShowImage()
 10,0,0,,(Chew on the panties.)ADD_MINUTES:1,You chew on the wad of panties.|They slowly become soaked by your own drool.,10,0,0,
-10,0,0,,(Suck on the panties.)ADD_MINUTES:1,"You suck on the pantie wad, savouting the taste|and wondering how clean they were.",10,0,0,
+10,0,0,,(Suck on the panties.)ADD_MINUTES:1,"You suck on the pantie wad, savoring the taste|and wondering how clean they were.",10,0,0,
 10,0,0,!HasOtherGag,(Spit out the panties.)ADD_MINUTES:1,You spit the soaked wad of panties out|of your mouth and can now talk again.,0,0,0,SelfUngag()
 10,0,0,HasOtherGag,(Spit out the panties.)ADD_MINUTES:1,"You try to spit the panties out, but the other gag has|them trapped.  You'll need to remove that first.",10,0,0,
diff --git a/C999_Common/PantieGag/Text_CN.csv b/C999_Common/PantieGag/Text_CN.csv
index b6f155c5db..a5e94f6e5a 100644
--- a/C999_Common/PantieGag/Text_CN.csv
+++ b/C999_Common/PantieGag/Text_CN.csv
@@ -1,3 +1,3 @@
 Tag,Content
-BadTiming,You fantasizes about being gagged but realize that|it might not be the best time to gag yourself.
+BadTiming,You fantasize about being gagged but realize that|it might not be the best time to gag yourself.
 OtherGag,You can stuff panties into your|mouth with another gag block it.
diff --git a/C999_Common/PantieGag/Text_EN.csv b/C999_Common/PantieGag/Text_EN.csv
index b6f155c5db..a5e94f6e5a 100644
--- a/C999_Common/PantieGag/Text_EN.csv
+++ b/C999_Common/PantieGag/Text_EN.csv
@@ -1,3 +1,3 @@
 Tag,Content
-BadTiming,You fantasizes about being gagged but realize that|it might not be the best time to gag yourself.
+BadTiming,You fantasize about being gagged but realize that|it might not be the best time to gag yourself.
 OtherGag,You can stuff panties into your|mouth with another gag block it.
diff --git a/C999_Common/PantieGag/Text_FR.csv b/C999_Common/PantieGag/Text_FR.csv
index b6f155c5db..a5e94f6e5a 100644
--- a/C999_Common/PantieGag/Text_FR.csv
+++ b/C999_Common/PantieGag/Text_FR.csv
@@ -1,3 +1,3 @@
 Tag,Content
-BadTiming,You fantasizes about being gagged but realize that|it might not be the best time to gag yourself.
+BadTiming,You fantasize about being gagged but realize that|it might not be the best time to gag yourself.
 OtherGag,You can stuff panties into your|mouth with another gag block it.
diff --git a/C999_Common/Races/Race.js b/C999_Common/Races/Race.js
index 9c229b0b90..9b75e2fd8e 100644
--- a/C999_Common/Races/Race.js
+++ b/C999_Common/Races/Race.js
@@ -31,31 +31,31 @@ var RaceSpeed = 0;
 
 // Generates a full race sequence
 function RaceGenerateMoves(StartTime, DifficultyText) {
-	
+
 	// Set the difficulty ratio
 	var DifficultyRatio = 1;
 	if (DifficultyText == "Easy") DifficultyRatio = 1.5;
 	if (DifficultyText == "Hard") DifficultyRatio = 0.6667;
-		
+
 	// Full the race sequence
 	var CurTimer = StartTime + 3000;
 	var Seq = 0;
 	RaceMoves = [];
 	while (Seq < MaxRaceSequence) {
-		
+
 		// Create a new race move to do at a random position
 		RaceMoves[RaceMoves.length] = [Math.floor(Math.random() * 8), CurTimer];
 		CurTimer = CurTimer + Math.floor((Math.random() * 600 + 300) * DifficultyRatio);
 		Seq++;
-		
+
 	}
 
 }
 
 // Load the race animations and full sequence
 function RaceLoad(Racer, RacerImageSet, AllowedMinutes, Difficulty, EndGoal, EndGoalText, IconLeft, IconRight, BackgroundImage, EndFunction, SkillBonus) {
-	
-	// Creates a brand new race 
+
+	// Creates a brand new race
 	LeaveIcon = "";
 	RaceTimer = 0;
 	RaceEndTimer = RaceStartTime + (AllowedMinutes * 60 * 1000);
@@ -63,7 +63,7 @@ function RaceLoad(Racer, RacerImageSet, AllowedMinutes, Difficulty, EndGoal, End
 	RaceSpeed = 0;
 	RaceProgress = 0;
 	RaceActorImageFrame = 0;
-	RaceEnded = false;	
+	RaceEnded = false;
 	RacePerfect = true;
 	RaceLastMoveType = -1;
 	RaceLastMoveTypeTimer = -1;
@@ -81,13 +81,13 @@ function RaceLoad(Racer, RacerImageSet, AllowedMinutes, Difficulty, EndGoal, End
 	RaceEndFunction = EndFunction;
 	RaceBackgroundImage = BackgroundImage;
 	RaceGenerateMoves(RaceStartTime, Difficulty);
-	
+
 	// Keep a backup of the current chapter and screen
 	RaceBackupChapter = CurrentChapter;
 	RaceBackupScreen = CurrentScreen;
 	CurrentChapter = "C999_Common";
 	CurrentScreen = "Race";
-	
+
 }
 
 // Draw the race icons
@@ -96,22 +96,22 @@ function RaceDrawIcons() {
 	// Scroll the race icons with time
 	var Seq = 0;
 	while (Seq < RaceMoves.length) {
-	
+
 		// Draw the move from 3 seconds before to 1 second after
-		if ((RaceMoves[Seq][RaceMoveTime] <= RaceTimer + 3000) && (RaceMoves[Seq][RaceMoveTime] >= RaceTimer - 1000)) {			
+		if ((RaceMoves[Seq][RaceMoveTime] <= RaceTimer + 3000) && (RaceMoves[Seq][RaceMoveTime] >= RaceTimer - 1000)) {
 			if (RaceMoves[Seq][RaceMoveType] <= 3)
 				DrawImage(RaceIconLeft, 3 + (RaceMoves[Seq][RaceMoveType] * 75), 410 + Math.floor((RaceTimer - RaceMoves[Seq][RaceMoveTime]) / 6));
-			else 
+			else
 				DrawImage(RaceIconRight, 603 + (RaceMoves[Seq][RaceMoveType] * 75), 410 + Math.floor((RaceTimer - RaceMoves[Seq][RaceMoveTime]) / 6));
 		}
-		
+
 		// Remove the move from the sequence if it's past due
 		if (RaceMoves[Seq][RaceMoveTime] < RaceTimer - 1000) {
 			RaceMoves.splice(Seq, 1);
 			RaceMiss();
-		}	
+		}
 		else Seq = Seq + 1;
-		
+
 		// Beyond 3 seconds forward, we exit
 		if (Seq < RaceMoves.length)
 			if (RaceMoves[Seq][RaceMoveTime] > RaceTimer + 3000)
@@ -127,10 +127,10 @@ function RaceDrawBar() {
 	// Draw 4 bars on each sides
 	var XOffset = 0;
 	for(BarNum = 0; BarNum <= 7; BarNum++) {
-		
+
 		// Draw the bars on both sides of the screen
 		if (BarNum == 4) XOffset = 600;
-		
+
 		// The color changes when it's clicked or pressed
 		DrawRect(XOffset + 3 + (BarNum * 75), 437, 70, 27, "White");
 		if ((RaceLastMoveType == BarNum) && (RaceLastMoveTypeTimer >= RaceTimer))
@@ -223,12 +223,12 @@ function RaceDoMove(MoveType) {
 
 	// Make sure the hit is valid
 	if ((MoveType >= 0) && (RaceMoves.length > 0)) {
-		
+
 		// For each moves in the list
 		var Hit = false;
 		var Seq = 0;
 		while (Seq < RaceMoves.length) {
-			
+
 			// If the move connects (good timing and good type)
 			if ((RaceMoves[Seq][RaceMoveTime] <= RaceTimer + 300) && (RaceMoves[Seq][RaceMoveTime] >= RaceTimer - 300) && (MoveType == RaceMoves[Seq][RaceMoveType])) {
 				RaceMoves.splice(Seq, 1);
@@ -236,10 +236,10 @@ function RaceDoMove(MoveType) {
 				Seq = RaceMoves.length;
 			}
 			else Seq++;
-			
+
 			// Beyond 0.5 seconds forward, we give up
 			if (Seq < RaceMoves.length)
-				if (RaceMoves[Seq][RaceMoveTime] > RaceTimer + 300) 
+				if (RaceMoves[Seq][RaceMoveTime] > RaceTimer + 300)
 					Seq = RaceMoves.length;
 
 		}
@@ -259,16 +259,16 @@ function C999_Common_Race_Run() {
 
 	// If the actor must move forward and progress
 	if ((RaceSpeed > 0) && !RaceEnded) {
-		
+
 		// The progress is (Speed) pixels every second
 		RaceProgress = RaceProgress + (RunInterval / 1000) * RaceSpeed;
-		
+
 		// If the goal is achieved
 		if (RaceProgress >= RaceGoal) {
 			RaceProgress = RaceGoal;
 			RaceEnd(true);
 		}
-		
+
 	}
 
 	// Paints the background
@@ -277,7 +277,7 @@ function C999_Common_Race_Run() {
 	// Increments the race timer and draw the actor
 	if (!RaceEnded) RaceTimer = RaceTimer + RunInterval;
 	RaceDrawActor();
-	
+
 	// If the race is over and not completed, we flag a defeat
 	if ((RaceTimer >= RaceEndTimer) && !RaceEnded)
 		RaceEnd(false);
@@ -288,7 +288,7 @@ function C999_Common_Race_Run() {
 			RaceDrawBar();
 			RaceDrawIcons();
 			RaceDrawStats();
-		} 
+		}
 		else {
 			DrawText(RaceGoalText, 600, 25, "white");
 			DrawText(GetCSVText(RaceText, "Difficulty") + " " + GetCSVText(RaceText, RaceDifficultyText), 500, 65, "white");
@@ -297,7 +297,7 @@ function C999_Common_Race_Run() {
 	}
 
 	// Draw the end text
-	if (RaceEnded) {		
+	if (RaceEnded) {
 		if ((RaceProgress >= RaceGoal) && RacePerfect) DrawText(GetCSVText(RaceText, "Perfect"), 600, 25, "white");
 		if ((RaceProgress >= RaceGoal) && !RacePerfect) DrawText(GetCSVText(RaceText, "Victory"), 600, 25, "white");
 		if (RaceProgress < RaceGoal) DrawText(GetCSVText(RaceText, "Defeat"), 600, 25, "white");
@@ -308,17 +308,17 @@ function C999_Common_Race_Run() {
 
 // When a key is pressed while racing (for both keyboard and mobile)
 function C999_Common_Race_KeyDown() {
-	
+
 	// If the race has started, we check the key pressed and send it as a race move
 	if ((RaceTimer > RaceStartTime) && !RaceEnded) {
-		
+
 		var MoveType = -1;
 		for(T = 0; T <= 7; T++)
-			if ((KeyPress == RaceMovesTypeKeyUpper[T]) || (KeyPress == RaceMovesTypeKeyLower[T])) 
+			if ((KeyPress == RaceMovesTypeKeyUpper[T]) || (KeyPress == RaceMovesTypeKeyLower[T]))
 				MoveType = T;
 		RaceDoMove(MoveType);
 	}
-	
+
 }
 
 // When a click is done while racing (only works on mobile)
diff --git a/C999_Common/Rope/Text_EN.csv b/C999_Common/Rope/Text_EN.csv
index e5fe6c42a6..b244472d98 100644
--- a/C999_Common/Rope/Text_EN.csv
+++ b/C999_Common/Rope/Text_EN.csv
@@ -1,3 +1,3 @@
 Tag,Content
 ConfirmSelfBondage,You know the ropes and can tie yourself up but you|might not be able to get out.  Do you want to do it?
-BadTiming,You fantasizes about tying yourself up but realize|that it might not be the best time for that.
+BadTiming,You fantasize about tying yourself up but realize|that it might not be the best time for that.
diff --git a/C999_Common/SockGag/Stage_CN.csv b/C999_Common/SockGag/Stage_CN.csv
index 28e18d416c..63c27aefd1 100644
--- a/C999_Common/SockGag/Stage_CN.csv
+++ b/C999_Common/SockGag/Stage_CN.csv
@@ -3,6 +3,6 @@ Stage,LoveReq,SubReq,VarReq,Interaction,Result,NextStage,LoveMod,SubMod,Function
 0,0,0,Common_PlayerNotRestrained,(Gag yourself.)ADD_MINUTES:1,"You stuff the sock into your mouth,|pushing it all in and packing it full.",10,0,0,SelfGag()
 10,0,0,HasLooseSockGag,(Inspect the loose gag.)ADD_MINUTES:1,"An odd sock is not much use for wearing,|but it would pack full even the biggest mouth.",10,0,0,ShowImage()
 10,0,0,,(Chew on the sock.)ADD_MINUTES:1,You chew on the sock wad.|It slowly becomes soaked by your own drool.,10,0,0,
-10,0,0,,(Suck on the sock.)ADD_MINUTES:1,"You suck on the sock, savouting the taste|and wondering how clean it was.",10,0,0,
+10,0,0,,(Suck on the sock.)ADD_MINUTES:1,"You suck on the sock, savoring the taste|and wondering how clean it was.",10,0,0,
 10,0,0,!HasOtherGag,(Spit out the sock.)ADD_MINUTES:1,You spit the sodden sock out of|your mouth and can now talk again.,0,0,0,SelfUngag()
 10,0,0,HasOtherGag,(Spit out the sock.)ADD_MINUTES:1,"You try to spit the sock out, but the other gag has|them trapped.  You'll need to remove that first.",10,0,0,
diff --git a/C999_Common/SockGag/Stage_EN.csv b/C999_Common/SockGag/Stage_EN.csv
index 28e18d416c..63c27aefd1 100644
--- a/C999_Common/SockGag/Stage_EN.csv
+++ b/C999_Common/SockGag/Stage_EN.csv
@@ -3,6 +3,6 @@ Stage,LoveReq,SubReq,VarReq,Interaction,Result,NextStage,LoveMod,SubMod,Function
 0,0,0,Common_PlayerNotRestrained,(Gag yourself.)ADD_MINUTES:1,"You stuff the sock into your mouth,|pushing it all in and packing it full.",10,0,0,SelfGag()
 10,0,0,HasLooseSockGag,(Inspect the loose gag.)ADD_MINUTES:1,"An odd sock is not much use for wearing,|but it would pack full even the biggest mouth.",10,0,0,ShowImage()
 10,0,0,,(Chew on the sock.)ADD_MINUTES:1,You chew on the sock wad.|It slowly becomes soaked by your own drool.,10,0,0,
-10,0,0,,(Suck on the sock.)ADD_MINUTES:1,"You suck on the sock, savouting the taste|and wondering how clean it was.",10,0,0,
+10,0,0,,(Suck on the sock.)ADD_MINUTES:1,"You suck on the sock, savoring the taste|and wondering how clean it was.",10,0,0,
 10,0,0,!HasOtherGag,(Spit out the sock.)ADD_MINUTES:1,You spit the sodden sock out of|your mouth and can now talk again.,0,0,0,SelfUngag()
 10,0,0,HasOtherGag,(Spit out the sock.)ADD_MINUTES:1,"You try to spit the sock out, but the other gag has|them trapped.  You'll need to remove that first.",10,0,0,
diff --git a/C999_Common/SockGag/Stage_FR.csv b/C999_Common/SockGag/Stage_FR.csv
index 28e18d416c..63c27aefd1 100644
--- a/C999_Common/SockGag/Stage_FR.csv
+++ b/C999_Common/SockGag/Stage_FR.csv
@@ -3,6 +3,6 @@ Stage,LoveReq,SubReq,VarReq,Interaction,Result,NextStage,LoveMod,SubMod,Function
 0,0,0,Common_PlayerNotRestrained,(Gag yourself.)ADD_MINUTES:1,"You stuff the sock into your mouth,|pushing it all in and packing it full.",10,0,0,SelfGag()
 10,0,0,HasLooseSockGag,(Inspect the loose gag.)ADD_MINUTES:1,"An odd sock is not much use for wearing,|but it would pack full even the biggest mouth.",10,0,0,ShowImage()
 10,0,0,,(Chew on the sock.)ADD_MINUTES:1,You chew on the sock wad.|It slowly becomes soaked by your own drool.,10,0,0,
-10,0,0,,(Suck on the sock.)ADD_MINUTES:1,"You suck on the sock, savouting the taste|and wondering how clean it was.",10,0,0,
+10,0,0,,(Suck on the sock.)ADD_MINUTES:1,"You suck on the sock, savoring the taste|and wondering how clean it was.",10,0,0,
 10,0,0,!HasOtherGag,(Spit out the sock.)ADD_MINUTES:1,You spit the sodden sock out of|your mouth and can now talk again.,0,0,0,SelfUngag()
 10,0,0,HasOtherGag,(Spit out the sock.)ADD_MINUTES:1,"You try to spit the sock out, but the other gag has|them trapped.  You'll need to remove that first.",10,0,0,
diff --git a/C999_Common/SockGag/Text_CN.csv b/C999_Common/SockGag/Text_CN.csv
index 64aade2b17..6f2f2d48ed 100644
--- a/C999_Common/SockGag/Text_CN.csv
+++ b/C999_Common/SockGag/Text_CN.csv
@@ -1,3 +1,3 @@
 Tag,Content
-BadTiming,You fantasizes about being gagged but realize that|it might not be the best time to gag yourself.
+BadTiming,You fantasize about being gagged but realize that|it might not be the best time to gag yourself.
 OtherGag,You can put a sock into your|mouth with another gag block it.
diff --git a/C999_Common/SockGag/Text_EN.csv b/C999_Common/SockGag/Text_EN.csv
index 64aade2b17..6f2f2d48ed 100644
--- a/C999_Common/SockGag/Text_EN.csv
+++ b/C999_Common/SockGag/Text_EN.csv
@@ -1,3 +1,3 @@
 Tag,Content
-BadTiming,You fantasizes about being gagged but realize that|it might not be the best time to gag yourself.
+BadTiming,You fantasize about being gagged but realize that|it might not be the best time to gag yourself.
 OtherGag,You can put a sock into your|mouth with another gag block it.
diff --git a/C999_Common/SockGag/Text_FR.csv b/C999_Common/SockGag/Text_FR.csv
index 64aade2b17..6f2f2d48ed 100644
--- a/C999_Common/SockGag/Text_FR.csv
+++ b/C999_Common/SockGag/Text_FR.csv
@@ -1,3 +1,3 @@
 Tag,Content
-BadTiming,You fantasizes about being gagged but realize that|it might not be the best time to gag yourself.
+BadTiming,You fantasize about being gagged but realize that|it might not be the best time to gag yourself.
 OtherGag,You can put a sock into your|mouth with another gag block it.
diff --git a/C999_Common/TapeGag/Text_EN.csv b/C999_Common/TapeGag/Text_EN.csv
index 63bb551e2b..93239c973e 100644
--- a/C999_Common/TapeGag/Text_EN.csv
+++ b/C999_Common/TapeGag/Text_EN.csv
@@ -1,2 +1,2 @@
 Tag,Content
-BadTiming,You fantasizes about being gagged but realize that|it might not be the best time to gag yourself.
+BadTiming,You fantasize about being gagged but realize that|it might not be the best time to gag yourself.
diff --git a/Cheat.js b/Cheat.js
index a9bb9a325f..33e0b0559e 100644
--- a/Cheat.js
+++ b/Cheat.js
@@ -2,20 +2,20 @@ var CheatAllow = false;
 
 // Receives cheat keys
 function CheatKey() {
-	
+
 	// No cheats until the player has a name
 	if (Common_PlayerName != "") {
-	
+
 		// In a fight or a race, the user can press * to win automatically
 		if (!FightEnded && (FightTimer > 0)) { if (KeyPress == 42) FightEnd(true); return; }
 		if (!DoubleFightEnded && (DoubleFightTimer > 0)) { if (KeyPress == 42) DoubleFightEnd(true); return; }
 		if (!RaceEnded && (RaceTimer > 0)) { if (KeyPress == 42) { RaceProgress = RaceGoal; RaceEnd(true); } return; }
 		if (!QuizEnded && (QuizTimer > 0) && (QuizBetweenQuestionTimer == 0) && (QuizAnswerText == "")) { if (KeyPress == 42) { QuizAnswerText = QuizQuestion[QuizProgressLeft + QuizProgressRight][QuizQuestionAnswer1]; QuizAnswerBy = "Left"; QuizProgressLeft++; QuizBetweenQuestionTimer = QuizTimer + QuizOtherQuestionTime; } return; }
-		
+
 		// If we must manipulate time using + and -
 		if (KeyPress == 43) CheatTime(900000);
 		if (KeyPress == 45) CheatTime(-900000);
-		
+
 		// Specific cheats by functions
 		if (CurrentActor != "") CheatActor();
 		if ((CurrentChapter == "C012_AfterClass") && (CurrentScreen == "Dorm")) CheatDorm();
@@ -88,7 +88,7 @@ function CheatDorm() {
 	if ((KeyPress == 42) && !GameLogQuery(CurrentChapter, "", "EventGrounded")) {
 		PlayerReleaseBondage();
 		if (PlayerHasLockedInventory("ChastityBelt")) { PlayerUnlockInventory("ChastityBelt"); PlayerAddInventory("ChastityBelt", 1); }
-		if (PlayerHasLockedInventory("VibratingEgg")) { PlayerUnlockInventory("VibratingEgg"); PlayerAddInventory("VibratingEgg", 1); }		
+		if (PlayerHasLockedInventory("VibratingEgg")) { PlayerUnlockInventory("VibratingEgg"); PlayerAddInventory("VibratingEgg", 1); }
 	}
 
 }
\ No newline at end of file
diff --git a/Common.js b/Common.js
index d498c088e2..9db471c7c9 100644
--- a/Common.js
+++ b/Common.js
@@ -102,7 +102,7 @@ function DetectMobile() {
 
 // Parse a CSV file
 function ParseCSV(str) {
-		
+
     var arr = [];
     var quote = false;  // true means we're inside a quoted field
 
@@ -115,7 +115,7 @@ function ParseCSV(str) {
         // If the current character is a quotation mark, and we're inside a
         // quoted field, and the next character is also a quotation mark,
         // add a quotation mark to the current column and skip the next character
-        if (cc == '"' && quote && nc == '"') { arr[row][col] += cc; ++c; continue; }  
+        if (cc == '"' && quote && nc == '"') { arr[row][col] += cc; ++c; continue; }
 
         // If it's just one quotation mark, begin/end quoted field
         if (cc == '"') { quote = !quote; continue; }
@@ -140,12 +140,12 @@ function ReadCSV(Array, ChapterOrPath, Screen, Type, Language) {
     var Path = (Screen && Type)
                  ? ChapterOrPath + "/" + Screen + "/" + Type + (Language ? "_" : "") + (Language || "") + ".csv"
                  : ChapterOrPath;
-    
+
     if (CSVCache[Path]) {
         window[Array] = CSVCache[Path];
         return;
     }
-    
+
     // Opens the file, parse it and returns the result in an array
     Get(Path, function() {
         if (this.status == 200) {
@@ -195,7 +195,7 @@ function GetWorkingLanguageForChapter(Chapter) {
 }
 
 // Load the interactions from a scene and keep it in common variable
-function LoadInteractions() {	
+function LoadInteractions() {
 	ReadCSV("CurrentIntro", CurrentChapter, CurrentScreen, "Intro", GetWorkingLanguage());
 	ReadCSV("CurrentStage", CurrentChapter, CurrentScreen, "Stage", GetWorkingLanguage());
 	LoadText();
@@ -216,7 +216,7 @@ function DynamicFunction(FunctionName) {
 
 // Set the current scene (chapter and screen)
 function SetScene(Chapter, Screen) {
-	
+
 	// Keep the chapter and screen
 	CurrentStage = null;
 	CurrentIntro = null;
@@ -235,15 +235,15 @@ function SetScene(Chapter, Screen) {
 
 	// Load the screen code
 	DynamicFunction(CurrentChapter + "_" + CurrentScreen + "_Load()");
-	
+
 }
 
 // Validates if any interaction was clicked
 function ClickInteraction(CurrentStagePosition) {
-	
+
 	// Make sure the current stage is loaded
 	if (CurrentStage != null) {
-	
+
 		// If a regular option was clicked, we process it
 		var Pos = 0;
 		for (var L = 0; L < CurrentStage.length; L++)
@@ -281,13 +281,13 @@ function GetText(Tag) {
 
 	// Make sure the text CSV file is loaded
 	if (CurrentText != null) {
-		
+
 		// Cycle the text to find a matching tag and returns the text content
 		Tag = Tag.trim().toUpperCase();
 		for (var T = 0; T < CurrentText.length; T++)
 			if (CurrentText[T][TextTag].trim().toUpperCase() == Tag)
 				return CurrentText[T][TextContent].trim();
-		
+
 		// Returns an error message
 		return "MISSING TEXT FOR TAG: " + Tag.trim();
 
@@ -300,13 +300,13 @@ function GetCSVText(CSVText, Tag) {
 
 	// Make sure the text CSV file is loaded
 	if (CSVText != null) {
-		
+
 		// Cycle the text to find a matching tag and returns the text content
 		Tag = Tag.trim().toUpperCase();
 		for (var T = 0; T < CSVText.length; T++)
 			if (CSVText[T][TextTag].trim().toUpperCase() == Tag)
 				return CSVText[T][TextContent].trim();
-		
+
 		// Returns an error message
 		return "MISSING TEXT FOR TAG: " + Tag.trim();
 
@@ -316,15 +316,15 @@ function GetCSVText(CSVText, Tag) {
 
 // Triggers the leave or wait button if needed
 function LeaveButtonClick() {
-	
+
 	// If the wait option was clicked, we skip 2 minutes
 	if (LeaveIcon == "Wait")
-		if ((MouseX >= 1125) && (MouseX <= 1200) && (MouseY >= 600) && (MouseY <= 675)) 
+		if ((MouseX >= 1125) && (MouseX <= 1200) && (MouseY >= 600) && (MouseY <= 675))
 			CurrentTime = CurrentTime + 120000;
 
 	// If the leave option was clicked, we return to the previous screen
 	if ((LeaveIcon == "Leave") && (LeaveScreen != ""))
-		if ((MouseX >= 1125) && (MouseX <= 1200) && (MouseY >= 600) && (MouseY <= 675)) 
+		if ((MouseX >= 1125) && (MouseX <= 1200) && (MouseY >= 600) && (MouseY <= 675))
 			SetScene(LeaveChapter, LeaveScreen);
 
 }
diff --git a/Drawing.js b/Drawing.js
index 94ed65f48b..12b3f3425c 100644
--- a/Drawing.js
+++ b/Drawing.js
@@ -1,7 +1,7 @@
 // The main game canvas where everything will be drawn
 var MainCanvas;
 
-// A bank of all the chached images
+// A bank of all the cached images
 var CacheImage = {};
 
 // Icons bank and paths
@@ -44,7 +44,7 @@ function DrawGetImage(Source) {
     // returns the final image
     return CacheImage[Source];
 }
-		
+
 // Draw a zoomed image from a source to the canvas
 function DrawImageZoom(Source, SX, SY, SWidth, SHeight, X, Y, Width, Height) {
 	MainCanvas.drawImage(DrawGetImage(Source), SX, SY, Math.round(SWidth), Math.round(SHeight), X, Y, Width, Height);
@@ -96,7 +96,7 @@ function DrawText(Text, X, Y, Color) {
 	else {
 		MainCanvas.fillText(Text.substring(0, Text.indexOf("|")), X, Y - 19);
 		MainCanvas.fillText(Text.substring(Text.indexOf("|") + 1, 1000), X, Y + 19);
-	}					
+	}
 
 }
 
@@ -106,27 +106,27 @@ function DrawButton(Left, Top, Width, Height, Label) {
 	// Draw the button rectangle
 	MainCanvas.beginPath();
 	MainCanvas.rect(Left, Top, Width, Height);
-    MainCanvas.fillStyle = 'white'; 
+    MainCanvas.fillStyle = 'white';
     MainCanvas.fillRect(Left, Top, Width, Height);
-	MainCanvas.fill();	
+	MainCanvas.fill();
 	MainCanvas.lineWidth = '2';
 	MainCanvas.strokeStyle = 'black';
 	MainCanvas.stroke();
 	MainCanvas.closePath();
-	
+
 	// Draw the text
 	DrawText(Label, Left + Width / 2, Top + Height / 2, "black");
-	
+
 }
 
 // Draw a basic rectangle
 function DrawRect(Left, Top, Width, Height, Color) {
 	MainCanvas.beginPath();
 	MainCanvas.rect(Left, Top, Width, Height);
-    MainCanvas.fillStyle = Color; 
+    MainCanvas.fillStyle = Color;
     MainCanvas.fillRect(Left, Top, Width, Height);
-	MainCanvas.fill();	
-	MainCanvas.closePath();		
+	MainCanvas.fill();
+	MainCanvas.closePath();
 }
 
 // Draw a basic circle
@@ -135,19 +135,19 @@ function DrawCircle(CenterX, CenterY, Radius, LineWidth, LineColor) {
 	MainCanvas.arc(CenterX, CenterY, Radius, 0, 2 * Math.PI, false);
 	MainCanvas.lineWidth = LineWidth;
 	MainCanvas.strokeStyle = LineColor;
-	MainCanvas.stroke();	
+	MainCanvas.stroke();
 }
 
 // Draw --- if zero, +value in green if positive, -value in red if negative
-function DrawPosNegValue(Value, X, Y) {	
+function DrawPosNegValue(Value, X, Y) {
 	if (Value == 0) DrawText("---", X, Y, "black");
 	if (Value > 0) DrawText("+" + Value.toString(), X, Y, "#00BB00");
-	if (Value < 0) DrawText(Value.toString(), X, Y, "#BB0000");	
+	if (Value < 0) DrawText(Value.toString(), X, Y, "#BB0000");
 }
 
 // Draw the current actor stats toward the player
 function DrawActorStats(Left, Top) {
-	
+
 	// Draw the actor name and icon
 	DrawText(ActorGetDisplayName(), Left - 200, Top + 17, "black");
 	if (CurrentActor == Common_PlayerLover) DrawImage("Icons/Lover.png", Left - 110, Top);
@@ -168,12 +168,12 @@ function DrawActorStats(Left, Top) {
 function DrawIntro(Intro, CurrentStagePosition, LoveLevel, SubLevel) {
 
 	// Draw the top box and stats
-	DrawRect(0, 0, 599, 150, "White");	
+	DrawRect(0, 0, 599, 150, "White");
 	if (CurrentActor != "") {
 		DrawRect(30, 60, 539, 1, "Black");
 		DrawActorStats(300, 15);
 	}
-	
+
 	// Find the correct intro text
 	var ShowText = "";
 	if (OverridenIntroText != "")
@@ -187,7 +187,7 @@ function DrawIntro(Intro, CurrentStagePosition, LoveLevel, SubLevel) {
 	// Draw the intro
 	if (CurrentActor != "") DrawText(ShowText, 300, 105, "black");
 	else DrawText(ShowText, 300, 75, "black");
-				
+
 }
 
 // Draw a selectable option on the screen
@@ -195,32 +195,32 @@ function DrawOption(OptionText, Left, Top) {
 
 	// Draw the rectangle and text
 	if (OptionText.substr(0, 1) == "@") OptionText = OptionText.substr(1);
-	DrawRect(Left, Top, 299, 89, "White");	
+	DrawRect(Left, Top, 299, 89, "White");
 	if ((MouseX >= Left) && (MouseX <= Left + 299) && (MouseY >= Top) && (MouseY <= Top + 89) && !IsMobile) DrawText(OptionText, Left + 150, Top + 45, "#00BB00");
-	else DrawText(OptionText, Left + 150, Top + 45, "#BB0000");	
-	
+	else DrawText(OptionText, Left + 150, Top + 45, "#BB0000");
+
 }
 
-// Draw all the possible interactions 
+// Draw all the possible interactions
 function DrawInteraction(Stage, CurrentStagePosition, LoveLevel, SubLevel) {
 
 	// Find all the correct interactions for the current stage
 	var Pos = 0;
 	for (var S = 0; S < Stage.length; S++)
-		if (Stage[S][StageNumber] == CurrentStagePosition) 
+		if (Stage[S][StageNumber] == CurrentStagePosition)
 			if (ActorInteractionAvailable(Stage[S][StageLoveReq], Stage[S][StageSubReq], Stage[S][StageVarReq], Stage[S][StageInteractionText], false)) {
-				
+
 				// Draw the box and interaction
 				DrawOption(Stage[S][StageInteractionText], (Pos % 2) * 300, 151 + (Math.round((Pos - 1) / 2) * 90));
-				Pos = Pos + 1;			
-				
+				Pos = Pos + 1;
+
 			}
-		
+
 }
 
-// Find the current image file 
+// Find the current image file
 function FindImage(Intro, CurrentStagePosition) {
-	
+
 	// The image file is a column in the intro CSV file
 	var ImageName = "";
 	if (OverridenIntroImage != "")
@@ -277,10 +277,10 @@ function DrawInventory() {
 		DrawImage("Icons/" + GetPlayerIconImage() + "_Active.png", 0, 601);
 	else
 		DrawImage("Icons/" + GetPlayerIconImage() + "_Inactive.png", 0, 601);
-	
+
 	// Draw an arrow over the player head if there's a skill level up
 	if (PlayerSkillShowLevelUp > 0) DrawImage("Icons/SkillLevelUp.png", 0, 601);
-	
+
 	// Scroll in the full inventory to draw the icons and quantity, draw a padlock over the item if it's locked
 	var Pos = 1;
 	for (var I = 0; I < PlayerInventory.length; I++) {
@@ -291,7 +291,7 @@ function DrawInventory() {
 			// 11 positions for the items
 			if (Pos <= 11) {
 				var ImgState = "Inactive";
-				if (((MouseX >= 1 + Pos * 75) && (MouseX <= 74 + Pos * 75) && (MouseY >= 601) && (MouseY <= 674)) || (IsMobile)) ImgState = "Active";		
+				if (((MouseX >= 1 + Pos * 75) && (MouseX <= 74 + Pos * 75) && (MouseY >= 601) && (MouseY <= 674)) || (IsMobile)) ImgState = "Active";
 				DrawImage("Icons/" + PlayerInventory[I][PlayerInventoryName] + "_" + ImgState + ".png", 1 + Pos * 75, 601);
 				DrawText(PlayerInventory[I][PlayerInventoryQuantity].toString(), Pos * 75 + 64, 661, "#000000");
 				if (PlayerHasLockedInventory(PlayerInventory[I][PlayerInventoryName]))
@@ -304,13 +304,13 @@ function DrawInventory() {
 				if (((MouseX >= 1 + Pos * 75) && (MouseX <= 74 + Pos * 75) && (MouseY >= 601) && (MouseY <= 674)) || (IsMobile)) ImgState = "Active";
 				DrawImage("Icons/SecondInventoryTab_" + ImgState + ".png", 1 + Pos * 75, 601);
 			}
-			
+
 		};
-		
+
 		// Second inventory tab
-		if ((Pos >= 12) && (PlayerInventoryTab == 1)) {		
+		if ((Pos >= 12) && (PlayerInventoryTab == 1)) {
 			var ImgState = "Inactive";
-			if (((MouseX >= 1 + (Pos - 11) * 75) && (MouseX <= 74 + (Pos - 11) * 75) && (MouseY >= 601) && (MouseY <= 674)) || (IsMobile)) ImgState = "Active";		
+			if (((MouseX >= 1 + (Pos - 11) * 75) && (MouseX <= 74 + (Pos - 11) * 75) && (MouseY >= 601) && (MouseY <= 674)) || (IsMobile)) ImgState = "Active";
 			DrawImage("Icons/" + PlayerInventory[I][PlayerInventoryName] + "_" + ImgState + ".png", 1 + (Pos - 11) * 75, 601);
 			DrawText(PlayerInventory[I][PlayerInventoryQuantity].toString(), (Pos - 11) * 75 + 64, 661, "#000000");
 			if (PlayerHasLockedInventory(PlayerInventory[I][PlayerInventoryName]))
@@ -319,11 +319,11 @@ function DrawInventory() {
 
 		// Jumps to the next position
 		Pos = Pos + 1;
-		
+
 	}
 
 	// Scroll in the locked inventory also to find items that were not loaded
-	for (var I = 0; I < PlayerLockedInventory.length; I++) 
+	for (var I = 0; I < PlayerLockedInventory.length; I++)
 		if (!PlayerHasInventory(PlayerLockedInventory[I])) {
 
 			// First inventory tab
@@ -336,7 +336,7 @@ function DrawInventory() {
 						DrawImage("Icons/Lock_Active.png", Pos * 75, 600);
 					}
 					else {
-						DrawImage("Icons/" + PlayerLockedInventory[I] + "_Inactive.png", 1 + Pos * 75, 601);				
+						DrawImage("Icons/" + PlayerLockedInventory[I] + "_Inactive.png", 1 + Pos * 75, 601);
 						DrawImage("Icons/Lock_Inactive.png", Pos * 75, 600);
 					}
 				}
@@ -349,15 +349,15 @@ function DrawInventory() {
 				}
 
 			}
-			
+
 			// Second inventory tab
-			if ((Pos >= 12) && (PlayerInventoryTab == 1)) {		
+			if ((Pos >= 12) && (PlayerInventoryTab == 1)) {
 				if (((MouseX >= 1 + (Pos - 11) * 75) && (MouseX <= 74 + (Pos - 11) * 75) && (MouseY >= 601) && (MouseY <= 674)) || (IsMobile)) {
 					DrawImage("Icons/" + PlayerLockedInventory[I] + "_Active.png", 1 + (Pos - 11) * 75, 601);
 					DrawImage("Icons/Lock_Active.png", (Pos - 11) * 75, 600);
 				}
 				else {
-					DrawImage("Icons/" + PlayerLockedInventory[I] + "_Inactive.png", 1 + (Pos - 11) * 75, 601);				
+					DrawImage("Icons/" + PlayerLockedInventory[I] + "_Inactive.png", 1 + (Pos - 11) * 75, 601);
 					DrawImage("Icons/Lock_Inactive.png", (Pos - 11) * 75, 600);
 				}
 			};
@@ -366,7 +366,7 @@ function DrawInventory() {
 			Pos = Pos + 1;
 
 		};
-		
+
 	// On the second tab, we put an arrow to go back to the first tab
 	if ((Pos >= 12) && (PlayerInventoryTab == 1)) {
 		var ImgState = "Inactive";
@@ -400,16 +400,16 @@ function BuildBottomBar() {
 
 // Returns the name of the image file to use to draw the player
 function DrawGetPlayerImageName(IncludePose) {
-	
+
 	// Get the first part of the image
 	var ImageCloth = "Clothed";
 	if (Common_PlayerUnderwear) ImageCloth = "Underwear";
 	if (Common_PlayerNaked) ImageCloth = "Naked";
 	if ((Common_PlayerUnderwear || Common_PlayerNaked) && PlayerHasLockedInventory("ChastityBelt")) ImageCloth = "ChastityBelt";
 	if (Common_PlayerCostume != "") ImageCloth = Common_PlayerCostume
-	
+
 	// Second part is the type of bondage
-	var ImageBondage = "_NoBondage";	
+	var ImageBondage = "_NoBondage";
 	if (PlayerHasLockedInventory("Cuffs") == true) ImageBondage = "_Cuffs";
 	if (PlayerHasLockedInventory("Rope") == true) ImageBondage = "_Rope";
 	if (PlayerHasLockedInventory("Armbinder") == true) ImageBondage = "_Armbinder";
@@ -420,7 +420,7 @@ function DrawGetPlayerImageName(IncludePose) {
 		if (PlayerHasLockedInventory("Collar")) ImageCollar = "_Collar";
 		else ImageCollar = "_NoCollar";
 	}
-	
+
 	// Fourth part is the gag
 	var ImageGag = "_NoGag";
 	if (PlayerHasLockedInventory("BallGag") == true) ImageGag = "_BallGag";
@@ -429,7 +429,7 @@ function DrawGetPlayerImageName(IncludePose) {
     if (PlayerHasLockedInventory("DoubleOpenGag") == true) ImageGag = "_DoubleOpenGag";
 
 	// Fifth part is the blindfold
-	var ImageBlindfold = "";	
+	var ImageBlindfold = "";
     if (PlayerHasLockedInventory("Blindfold") == true) ImageBlindfold = "_Blindfold";
 
 	// Sixth part is the pose
@@ -449,7 +449,7 @@ function DrawPlayerImage(X, Y) {
 	} else {
 		if ((X == 0) && (Y == 0)) DrawImage("C999_Common/Player/" + DrawGetPlayerImageName(false) + ".jpg", 600, 0);
 		else DrawImageZoom("C999_Common/Player/" + DrawGetPlayerImageName(false) + ".jpg", X, Y, 600, 600, 600, 0, 1200, 1200);
-	}	
+	}
 }
 
 // Draw the transparent player image (600x900) with a zoom if required
@@ -459,10 +459,10 @@ function DrawTransparentPlayerImage(X, Y, Zoom) {
 
 // Draw the transparent actor over the current background
 function DrawActor(ActorToDraw, X, Y, Zoom) {
-	
+
 	// Validate first if we must draw the transparent player image
 	if (ActorToDraw == "Player") {
-		DrawTransparentPlayerImage(X, Y, Zoom);		
+		DrawTransparentPlayerImage(X, Y, Zoom);
 	} else {
 
 		// First, we retrieve the current clothes
@@ -471,7 +471,7 @@ function DrawActor(ActorToDraw, X, Y, Zoom) {
 		if (((ImageCloth == "Underwear") || (ImageCloth == "Naked")) && ActorSpecificHasInventory(ActorToDraw, "ChastityBelt")) ImageCloth = "ChastityBelt";
 
 		// Second part is the type of bondage
-		var ImageBondage = "_NoBondage";	
+		var ImageBondage = "_NoBondage";
 		if (ActorSpecificHasInventory(ActorToDraw, "Cuffs")) ImageBondage = "_Cuffs";
 		if (ActorSpecificHasInventory(ActorToDraw, "Rope")) ImageBondage = "_Rope";
 		if (ActorSpecificHasInventory(ActorToDraw, "TwoRopes")) ImageBondage = "_TwoRopes";
@@ -491,7 +491,7 @@ function DrawActor(ActorToDraw, X, Y, Zoom) {
 		if (ActorSpecificHasInventory(ActorToDraw, "ClothGag")) ImageGag = "_ClothGag";
 
 		// Fifth part is the blindfold
-		var ImageBlindfold = "";	
+		var ImageBlindfold = "";
 		if (ActorSpecificHasInventory(ActorToDraw, "Blindfold")) ImageBlindfold = "_Blindfold";
 
 		// Fourth part is the pose
@@ -500,7 +500,7 @@ function DrawActor(ActorToDraw, X, Y, Zoom) {
 
 		// Draw the full image from all parts
 		DrawImageZoom("Actors/" + ActorToDraw + "/" + ImageCloth + ImageBondage + ImageCollar + ImageGag + ImageBlindfold + ImagePose + ".png", 0, 0, 600, 900, X, Y, 600 * Zoom, 900 * Zoom);
-		
+
 	}
 
 }
diff --git a/Event.js b/Event.js
index 2f0b6e0763..ea01a519c6 100644
--- a/Event.js
+++ b/Event.js
@@ -42,11 +42,11 @@ function EventRandomPlayerPunishment() {
 
 		// Draw a punishment type at random
 		var PunishmentType = EventPunishmentList[Math.floor(Math.random() * EventPunishmentList.length)];
-		
+
 		// If the event is valid for that actor
 		var PunishmentStage = GetText("Punishment" + PunishmentType);
 		if (IsNumeric(PunishmentStage)) {
-		
+
 			// Check if the event can be done
 			if (PunishmentType == "Grounded") Result = parseInt(PunishmentStage);
 			if ((PunishmentType == "Spanked") && !GameLogQuery(CurrentChapter, "", "EventSpanked")) Result = parseInt(PunishmentStage);
@@ -59,7 +59,7 @@ function EventRandomPlayerPunishment() {
 	}
 
 	// Returns the punishment type which will become the dialog number
-	return Result;		
+	return Result;
 
 }
 
@@ -69,12 +69,12 @@ function EventRandomPlayerSubmissive() {
 	// Until we find a proper event
 	var Result = 0;
 	while (Result == 0) {
-	
+
 		// Draw an event type at random, make sure it doesn't repeat
 		var EventType = EventLastRandomType;
 		while (EventType == EventLastRandomType)
 			EventType = EventList[Math.floor(Math.random() * EventList.length)];
-		
+
 		// If the event is valid for that actor
 		var EventStage = GetText("Event" + EventType);
 		if (IsNumeric(EventStage)) {
@@ -109,7 +109,7 @@ function EventRandomPlayerSubmissive() {
 	// Returns the event type which will become the dialog number
 	EventLastRandomType = EventType;
 	return Result;
-	
+
 }
 
 // Log the end of an event, if it's the first time, it can change the actor attitude
@@ -122,38 +122,38 @@ function EventLogEnd() {
 	EventActivityCurrent = "";
 }
 
-		
+
 // When an activity event is registered
 function EventDoActivity(EventActivityType, EventLoveFactor, EventCurrentStage, EventEndStage, EventBonusStage) {
-	
+
 	// If it's a new activity
 	if (EventActivityCurrent != EventActivityType) {
-		
+
 		// Reset the count and sets the pose
 		ActorSetPose(EventActivityType);
 		EventActivityCurrent = EventActivityType;
 		EventActivityCount = 0;
 		EventActivityLove = 0;
-		
+
 		// The number of times the activity will be done depends on the love or hate
 		if ((EventActivityType == "Tickle") || (EventActivityType == "Masturbate")) EventActivityMaxCount = 5 + Math.floor(ActorGetValue(ActorLove) / 10);
 		else EventActivityMaxCount = 5 - Math.floor(ActorGetValue(ActorLove) / 10);
 		if (EventActivityMaxCount < 4) EventActivityMaxCount = 4;
 		if (EventActivityMaxCount > 8) EventActivityMaxCount = 8;
-		
+
 	}
-	
+
 	// Increments the activity
 	EventActivityCount++;
 	EventActivityLove = EventActivityLove + EventLoveFactor;
-	
+
 	// If a bonus event can be achieved
 	if ((EventActivityCount >= 3) && (EventBonusStage > 0)) {
-		
+
 		// 20% bonus chance (+20% if masturbated with an egg)
 		var BonusChance = Math.floor(Math.random() * 100);
 		if ((EventActivityType == "Masturbate") && PlayerHasLockedInventory("VibratingEgg")) BonusChance = BonusChance + 20;
-		
+
 		// If we have the bonus, we log and jump to that stage
 		if (BonusChance >= 80) {
 			EventLogEnd();
@@ -162,10 +162,10 @@ function EventDoActivity(EventActivityType, EventLoveFactor, EventCurrentStage,
 		}
 
 	}
-	
+
 	// When the activity is over
 	if (EventActivityCount >= EventActivityMaxCount) {
-		
+
 		// Log the activity and ends it
 		EventLogEnd()
 		if (EventActivityLove > 0) OverridenIntroText = GetText("ActivityEndGood");
@@ -173,10 +173,10 @@ function EventDoActivity(EventActivityType, EventLoveFactor, EventCurrentStage,
 		if (EventActivityLove < 0) OverridenIntroText = GetText("ActivityEndBad");
 		ActorSetPose("");
 		return EventEndStage;
-		
+
 	}
-	
+
 	// FALSE means the activity isn't over
 	return EventCurrentStage;
-	
+
 }
\ No newline at end of file
diff --git a/GameLog.js b/GameLog.js
index ca29dda67e..3a869f5d04 100644
--- a/GameLog.js
+++ b/GameLog.js
@@ -14,7 +14,7 @@ function GameLogSpecificAdd(ChapterToLog, ActorToLog, EventToLog) {
 	for (var L = 0; L < GameLog.length; L++)
 		if ((ChapterToLog == GameLog[L][GameLogChapter]) && (ActorToLog == GameLog[L][GameLogActor]) && (EventToLog == GameLog[L][GameLogEvent]))
 			return;
-		
+
 	// Log the event
 	GameLog[GameLog.length] = [ChapterToLog, ActorToLog, EventToLog, 0];
 
diff --git a/Inventory.js b/Inventory.js
index d62d9a2ede..3271dfd157 100644
--- a/Inventory.js
+++ b/Inventory.js
@@ -8,7 +8,7 @@ var PlayerInventoryTab = 0;
 // Set up the player clothes or costume
 function PlayerClothes(NewCloth) {
 	if ((NewCloth != "Clothed") && (NewCloth != "Underwear") && (NewCloth != "Naked")) Common_PlayerCostume = NewCloth;
-	else Common_PlayerCostume = "";	
+	else Common_PlayerCostume = "";
 	Common_PlayerCloth = NewCloth;
 	Common_PlayerUnderwear = (NewCloth == "Underwear");
 	Common_PlayerNaked = (NewCloth == "Naked");
@@ -42,10 +42,10 @@ function PlayerLockInventory(NewInventory) {
 	// Check if the item is already locked before adding it
 	for (var I = 0; I < PlayerLockedInventory.length; I++)
 		if (PlayerLockedInventory[I] == NewInventory)
-			return;		
+			return;
 	PlayerLockedInventory.push(NewInventory);
 	LoadRestrainStatus();
-	
+
 	// If there's rope/armbinder and a costume, we strip the player
 	if (((NewInventory == "Rope") || (NewInventory == "Armbinder")) && (Common_PlayerCostume != "") && (Common_PlayerCostume != "BlackDress") && (Common_PlayerCostume != "WhiteLingerie") && (Common_PlayerCostume != "RedBikini")) PlayerClothes("Underwear");
 
@@ -79,13 +79,13 @@ function PlayerUnlockAllInventory(UnlockedInventory) {
 
 // Returns true if the player has the locked inventory
 function PlayerHasLockedInventory(QueryInventory) {
-	
+
 	// Returns true if we find the locked inventory item
 	for (var I = 0; I < PlayerLockedInventory.length; I++)
 		if (QueryInventory == PlayerLockedInventory[I])
 			return true;
 	return false;
-	
+
 }
 
 // Add a new item to the inventory if it's not already there
@@ -98,16 +98,16 @@ function PlayerAddInventory(NewInventory, NewQuantity) {
 			if (PlayerInventory[I][PlayerInventoryQuantity] > 99) PlayerInventory[I][PlayerInventoryQuantity] = 99;
 			return;
 		}
-		
+
 	// If not, we create the new inventory data
 	if (NewQuantity > 99) NewQuantity = 99;
 	PlayerInventory[PlayerInventory.length] = [NewInventory, NewQuantity];
-	
+
 }
 
 // Remove an item from the player inventory
 function PlayerRemoveInventory(RemInventory, RemQuantity) {
-	
+
 	// Search for current inventory and remove the item
 	for (var I = 0; I < PlayerInventory.length; I++)
 		if (RemInventory == PlayerInventory[I][PlayerInventoryName])
@@ -136,13 +136,13 @@ function PlayerRemoveHalfInventory() {
 
 // Returns true if the player has the queried inventory
 function PlayerHasInventory(QueryInventory) {
-	
+
 	// Returns true if we find the inventory item
 	for (var I = 0; I < PlayerInventory.length; I++)
 		if (QueryInventory == PlayerInventory[I][PlayerInventoryName])
 			return true;
 	return false;
-	
+
 }
 
 // Pick a random restrain and applies it on the player
@@ -179,7 +179,7 @@ function PlayerRandomGag() {
 
 	// Applies it on the player
 	if (G != "") { PlayerRemoveInventory(G, 1); PlayerLockInventory(G); }
-	
+
 }
 
 // Restrains the player randomly from her own inventory
@@ -225,7 +225,7 @@ function PlayerInventoryTotalQuantity() {
 
 // Returns the name of the inventory item that was clicked in the bottom menu
 function GetClickedInventory() {
-	
+
 	// Returns the item name based on the position of the mouse
 	var Inv = "";
 	if ((MouseX <= 975) && (MouseY >= 601) && (MouseY <= 674)) {
@@ -233,7 +233,7 @@ function GetClickedInventory() {
 		// Check if the player icon was clicked
 		if ((MouseX >= 1) && (MouseX <= 74))
 			Inv = "Player";
-	
+
 		// Check in the regular inventory
 		var I;
 		if (Inv == "")
@@ -242,10 +242,10 @@ function GetClickedInventory() {
 					if (MouseX < 900) Inv = PlayerInventory[I][PlayerInventoryName];
 					else PlayerInventoryTab = 1;
 				}
-			
+
 		// Check in the locked inventory
 		if (Inv == "")
-			for (var L = 0; L < PlayerLockedInventory.length; L++)	
+			for (var L = 0; L < PlayerLockedInventory.length; L++)
 				if (!PlayerHasInventory(PlayerLockedInventory[L])) {
 					if ((MouseX >= 1 + (I + 1 - (PlayerInventoryTab * 11)) * 75) && (MouseX <= 74 + (I + 1 - (PlayerInventoryTab * 11)) * 75)) {
 						if (MouseX < 900) Inv = "Locked_" + PlayerLockedInventory[L];
diff --git a/SaveState.js b/SaveState.js
index 79c0702780..e85f77a20e 100644
--- a/SaveState.js
+++ b/SaveState.js
@@ -14,7 +14,7 @@ function SaveMenu(NextChapter, NextScreen) {
 function SaveStateGetSummary(SlotNumber) {
 
 	// Fetch the data
-	var SN = SlotNumber.toString();	
+	var SN = SlotNumber.toString();
 	var Summary = "@" + GetText("NoSaveOnSlot") + " " + SN;
 	if (localStorage.getItem("SaveGameVersion" + SN))
 		if (localStorage.getItem("SaveGameVersion" + SN) == SaveGameVersion) {
@@ -25,7 +25,7 @@ function SaveStateGetSummary(SlotNumber) {
 				SaveStateChapter = SaveStateChapter.substr(1, 100);
 			Summary = "@" + SaveStatePlayerName.substr(0, 10) + " - " + GetText("Chapter") + " " + SaveStateChapter + "|" + SaveStateDateTime;
 		}
-		
+
 	// Returns the summary
 	return Summary;
 
@@ -44,16 +44,16 @@ function SaveStateSlotSummary() {
 				CurrentStage[Slot][StageInteractionText] = SaveStateGetSummary(Slot);
 				Slot++;
 			}
-	
+
 		}
 
 }
 
 // Save the game state on a specific slot
 function SaveState(SlotNumber) {
-	
+
 	// Save the current state of the game and the transitional variables
-	var SN = SlotNumber.toString();	
+	var SN = SlotNumber.toString();
 	localStorage.setItem("SaveGameVersion" + SN, SaveGameVersion);
 	localStorage.setItem("SaveGameDateTime" + SN, GetFormatDate());
 	localStorage.setItem("CurrentChapter" + SN, SaveChapter);
@@ -61,7 +61,7 @@ function SaveState(SlotNumber) {
 	localStorage.setItem("Common_PlayerName" + SN, Common_PlayerName);
 	localStorage.setItem("Common_PlayerOwner" + SN, Common_PlayerOwner);
 	localStorage.setItem("Common_PlayerLover" + SN, Common_PlayerLover);
-	localStorage.setItem("Common_PlayerCloth" + SN, Common_PlayerCloth);	
+	localStorage.setItem("Common_PlayerCloth" + SN, Common_PlayerCloth);
 	localStorage.setItem("PlayerInventory" + SN, JSON.stringify(PlayerInventory));
 	localStorage.setItem("PlayerLockedInventory" + SN, JSON.stringify(PlayerLockedInventory));
 	localStorage.setItem("PlayerSkill" + SN, JSON.stringify(PlayerSkill));
@@ -79,7 +79,7 @@ function SaveState(SlotNumber) {
 function LoadState(SlotNumber) {
 
 	// If the save file is for the current version, we load
-	var SN = SlotNumber.toString();	
+	var SN = SlotNumber.toString();
 	if (localStorage.getItem("SaveGameVersion" + SN))
 		if (localStorage.getItem("SaveGameVersion" + SN) == SaveGameVersion) {
 
@@ -95,7 +95,7 @@ function LoadState(SlotNumber) {
 			GameLog = JSON.parse(localStorage.getItem("GameLog" + SN));
 			PlayerSkill = JSON.parse(localStorage.getItem("PlayerSkill" + SN));
 			CurrentTime = parseFloat(localStorage.getItem("CurrentTime" + SN));
-			
+
 			// Makes sure the owner and lover aren't null from previous saves
 			if (Common_PlayerOwner == null) Common_PlayerOwner = "";
 			if (Common_PlayerLover == null) Common_PlayerLover = "";
@@ -103,7 +103,7 @@ function LoadState(SlotNumber) {
 			// You can start with different clothes on chapter 12
 			if (CurrentChapter == "C012_AfterClass") {
 				Common_PlayerCloth = localStorage.getItem("Common_PlayerCloth" + SN);
-				if (Common_PlayerCloth == null) Common_PlayerCloth = "Clothed";	
+				if (Common_PlayerCloth == null) Common_PlayerCloth = "Clothed";
 				PlayerClothes(Common_PlayerCloth);
 			}
 
@@ -112,7 +112,7 @@ function LoadState(SlotNumber) {
 				if (Actor[L].length < 11)
 					Actor[L] = [Actor[L][0], Actor[L][1], Actor[L][2], Actor[L][3], Actor[L][4], Actor[L][5], Actor[L][6], Actor[L][7], Actor[L][8], false, ""];
 
-			// Make sure the game log array is wide enough (to remove when save games will be reset) 
+			// Make sure the game log array is wide enough (to remove when save games will be reset)
 			for (var L = 0; L < GameLog.length; L++)
 				if (GameLog[L].length < 4)
 					GameLog[L] = [GameLog[L][0], GameLog[L][1], GameLog[L][2], 0];
diff --git a/Time.js b/Time.js
index 4340912168..936fd4adb0 100644
--- a/Time.js
+++ b/Time.js
@@ -23,12 +23,12 @@ function msToTime(s) {
   var mins = s % 60;
   var hrs = (s - mins) / 60;
   return pad(hrs) + ':' + pad(mins) + ':' + pad(secs);
-  
+
 }
 
 // Runs the regular timer
 function ProcessTimer() {
-	
+
 	// Ticks the timer every for the screen refresh and events
 	clearInterval(CurrentTimer);
 	CurrentTimer = setInterval("MainRun()", RunInterval);
@@ -38,19 +38,19 @@ function ProcessTimer() {
 	if (RunTimer) {
 
 		// Add the interval in milliseconds
-		CurrentTime = CurrentTime + RunInterval;	
-		
+		CurrentTime = CurrentTime + RunInterval;
+
 		// If the time limit is reached, we jump to a limit screen
 		if (CurrentTime >= LimitTimer) {
-			
+
 			// Jump to the next chapter
-			CurrentTime = LimitTimer;		
+			CurrentTime = LimitTimer;
 			SetScene(LimitChapter, LimitScreen);
-			
+
 		}
-	
+
 	}
-		
+
 }
 
 // Starts the timer and sets the limits