diff --git a/Actor.js b/Actor.js
index 0bf154dc7bffe0eb90c8d5d86b2d775274a86778..c3fa5e01a4203c53bb54bb000f43f68aa100f27e 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 fe8f3a8a854a51c4b39135e591f080f50deb9a7c..7f73126321291a3a2bf979300208b1b8c5ad3983 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 5ea8a717b6da99a44427deb6d434f91e6aa434d2..d3d1a525f2cdeda5289fc51ce11db6a7b24eb079 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 88a675b68892bd0f5a5ed2a573bfa77523c2cec0..077e2ebafb863f99cfc99df1c4cc10cda0f19e24 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 2e347d9221251633943f04722c593726d5164b8d..dec8b522dceb361b1fd7c01e945f2d2fe26017a7 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 6f4d4365fcf5e1199a7fd4f3b741ce658d08892a..aa2df3a74ead4ad52f993bbecf09e82435aff59e 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 f0d27ee543d9a8f9e388d7b7feeae337ce199d81..462791d3ef330c5ff25711dbd094effa8f17fc88 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 f021ca9918cfcf67bc5c48082cad2ea5e04e5fde..bbe42c85806c95672913a90cd59e33ed1ece99ad 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 1a6222d9e1af1a782def32020c7cd098abbd2108..3d86903a5dccf5625cae0af6fe1ddfc4bf0cf3ec 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 e5063a5cebead652351c076b1f47d889b813f5fe..27f0e00cc7ed7c106c413892688cb7733292a1a4 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 38c70b7c48dbad3d256ac4129a05c082c207275b..73fe9f5981de4e4d319a5829a6c90d125bbbe4cf 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 58bcb6b60e0ca90ef4a6e96fd06d5c35c3b3f3f0..30f8bfea74baac65277abc2e59e2579574a5f83f 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 d33ebc5c9bf3b1398a427488300876415f26132d..040badef7ac047bd7ad510cd4f3ead69da17b674 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 43f9ada0b1e556c5bf8a55e50717c727dd68170b..50a678bdf6cee17ef1fc94f18b01588132fda4ec 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 8785a7e90e427cd71e5b3d5ef5363d70ea0cb27d..4debe47d9a853fd31327894589524c640552253e 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 11fdc4bbbec8ad1f92f5e4ea9cbf65e00dd9936a..fde0f9b795c341334a95bbde17465d9305be9050 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 15eac75ed1a157804dcd0e45aec0412a74c90c29..45d77ba1041b75915df47b6ec3504cd0533f51e1 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 5bab75a8022c7248e142d6d733cdb1a5f4b39c33..0a662066336909cc3d5fb97d895e6c83d7a4855f 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 9f42b2db88514c1d1e8f1fdbd02c5ce3709acf05..ed30f4a4aa22753b31a7dc5681f6471bd9690b80 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 1eb8139d3ee3b1707bcb2f34d8155a6777600d09..7f308238c75570ed9329a905eeab6a4b56844154 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 e26df9ad188e9e02a30dc9afa7520bf6384d6386..eac96a4efb2b9935a619538e31950c0e3e0d9293 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 8439f2242ad1b132f85f076b7b150663d5ef951c..9baded77983e74dc3234a64a0bd2c9c1cce111d8 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 733d7d4d5b61399cf98ab58b47bd7da6fde4ad7b..0180c03c2bc3529268b9a21d5b95e7c4930f584d 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 be22d81209b62c5ec4ecdefde98327a721f0006a..95c95b62bae88c3a7292ba677e13487747f31360 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 63bb551e2bb336249d4024e3fe45fda09bc2a0f2..93239c973e320361b741c619564b133973fb288b 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 543aca5b1eb648120df794547feec1696e2c1c0a..fe678b1a5e9385860bf6f2571574840e3a55ff64 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 d05f61ab6986511c06a28b9044095dfb186f280d..030cb99951696b801913d4082ac9bc90bc51111f 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 63bb551e2bb336249d4024e3fe45fda09bc2a0f2..93239c973e320361b741c619564b133973fb288b 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 72767b5c2cfd79c4c57acd0607a4fc2e464b149d..a9ab25635d713734dfb3b89052a0f6a7c98a2f57 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 ce5707d457c394c70bcd8d97b90498610e6fdbe4..de3d99d317f3b38bf57c648aba0ed45bae6a4ef1 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 63bb551e2bb336249d4024e3fe45fda09bc2a0f2..93239c973e320361b741c619564b133973fb288b 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 696f9261eb9f8ac2800970097e5f7ce3232af5c3..e75cd0e337cd6193c8fc65cf5c0f8b5d32cb3cff 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 32abc317371704c6b6950b1927f02e3dc65a6505..de35c0a63d861fcd8ad792637ed062af5ce002de 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 33f3bdf8bb5a2b5f1fbb2c83c03f83c4ad38a7e3..03e1d45c02f91639fa562ffe1af323a1ffddc979 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 33f3bdf8bb5a2b5f1fbb2c83c03f83c4ad38a7e3..03e1d45c02f91639fa562ffe1af323a1ffddc979 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 33f3bdf8bb5a2b5f1fbb2c83c03f83c4ad38a7e3..03e1d45c02f91639fa562ffe1af323a1ffddc979 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 b6f155c5dbd844b795f864983e81d80edc0fe75c..a5e94f6e5a7f8365503cc89e6df68c87157ded4a 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 b6f155c5dbd844b795f864983e81d80edc0fe75c..a5e94f6e5a7f8365503cc89e6df68c87157ded4a 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 b6f155c5dbd844b795f864983e81d80edc0fe75c..a5e94f6e5a7f8365503cc89e6df68c87157ded4a 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 9c229b0b900c9f34f24f7d01cd411a503f7c82e0..9b75e2fd8e915420ad30ec79fc78f29afc003bc7 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 e5fe6c42a6a455cf737b40ca2cea1374a49ba841..b244472d98003332b79e4a3a784ebcf009e3b02a 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 28e18d416cdfc111fde6e03bd290e6047eddaa8b..63c27aefd10893ed8649a452c3a13caebfbe5aa4 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 28e18d416cdfc111fde6e03bd290e6047eddaa8b..63c27aefd10893ed8649a452c3a13caebfbe5aa4 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 28e18d416cdfc111fde6e03bd290e6047eddaa8b..63c27aefd10893ed8649a452c3a13caebfbe5aa4 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 64aade2b17faaa29e7720ee2f5d2995ae7a0e331..6f2f2d48ed68cc2087ab63a5660a18b219421337 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 64aade2b17faaa29e7720ee2f5d2995ae7a0e331..6f2f2d48ed68cc2087ab63a5660a18b219421337 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 64aade2b17faaa29e7720ee2f5d2995ae7a0e331..6f2f2d48ed68cc2087ab63a5660a18b219421337 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 63bb551e2bb336249d4024e3fe45fda09bc2a0f2..93239c973e320361b741c619564b133973fb288b 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 a9bb9a325f4f939cdc8af9d206b584042304c96f..33e0b0559efd4cc9c7c795f31f8801f0b57e2652 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 d498c088e29b73bf5cd2f502552f11f167863ef2..9db471c7c981f176570069b0cc5c69ae607147e3 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 94ed65f48b04c08f4147b0d9046499d725c29ef4..12b3f3425c55f14cb47bbbcd8453a59b7354c87f 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 2f0b6e0763c6511e327062126a32c1d429bfe38c..ea01a519c6886e31bacb410a93f2ae97f6e7f995 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 ca29dda67ea47ffb4b759181bbced2e7defeed94..3a869f5d044097acbaa5856b04e71ab498d0ea81 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 d62d9a2ede7cb4d86bb0ec60bd1655d699579f62..3271dfd1572d04cb2fdff92d66f5d20a4efbe6ac 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 79c0702780095de2b61879723e646f6ecc768b8c..e85f77a20e0158715de8e0c3bf5df2a993b9d2f1 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 4340912168b85d23bd9f61e9c8281fc17f7b777a..936fd4adb0ef492de42521582a0c616542652d5d 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