diff --git a/Actors/412f4ac80a69606baa8c04610db326eab4972d9549e2bc8a.json b/Actors/412f4ac80a69606baa8c04610db326eab4972d9549e2bc8a.json
deleted file mode 100644
index 9f01c7328f..0000000000
--- a/Actors/412f4ac80a69606baa8c04610db326eab4972d9549e2bc8a.json
+++ /dev/null
@@ -1 +0,0 @@
-{"AccountName":"A","Password":"$2y$10$TauCLtUQTCRC5kRggrhk3uHeg0JCO7R7K5PFhy17oS5iSXuqhaIiu","Email":"$2y$10$vbxYaLVXm2EAdqjwbelEEe6UBsqqjZ31ABnVr5hpXBuR0.cNHjWqu","CharacterName":"Anna","Log":[{"Name":"SarahWillBePunished","Group":"NPC-Sarah"},{"Name":"MaidOpinion","Group":"Introduction"}],"Inventory":[{"Name":"CollegeOutfit1","Group":"Cloth"},{"Name":"HarnessBallGag","Group":"ItemMouth"},{"Name":"ClothOTMGag","Group":"ItemMouth"},{"Name":"DuctTapeGag","Group":"ItemMouth"},{"Name":"HempRope","Group":"ItemArms"},{"Name":"HempRope","Group":"ItemLegs"},{"Name":"HempRope","Group":"ItemFeet"},{"Name":"MetalCuffs","Group":"ItemArms"},{"Name":"LeatherArmbinder","Group":"ItemArms"},{"Name":"MetalChastityBelt","Group":"ItemPelvis"},{"Name":"LeatherCollar","Group":"ItemNeck"},{"Name":"LeatherCrop","Group":"ItemPelvis"},{"Name":"LeatherCrop","Group":"ItemTorso"},{"Name":"MetalCuffsKey","Group":"ItemArms"},{"Name":"RegularSleepingPill","Group":"ItemMouth"},{"Name":"RegularVibratingEgg","Group":"ItemPelvis"},{"Name":"NylonRope","Group":"ItemFeet"},{"Name":"NylonRope","Group":"ItemLegs"},{"Name":"NylonRope","Group":"ItemArms"},{"Name":"SmallClothGag","Group":"ItemMouth"},{"Name":"LeatherBelt","Group":"ItemFeet"},{"Name":"LeatherBelt","Group":"ItemLegs"},{"Name":"HarnessPanelGag","Group":"ItemMouth"}],"AssetFamily":"Female3DCG","Appearance":[{"Name":"HairBack1","Group":"HairBack","Color":"#dddddd"},{"Name":"XLarge","Group":"BodyUpper","Color":"White"},{"Name":"XLarge","Group":"BodyLower","Color":"White"},{"Name":"Eyes6","Group":"Eyes","Color":"#202020"},{"Name":"Mouth1","Group":"Mouth","Color":"Default"},{"Name":"Nipples1","Group":"Nipples","Color":"#9b4a2e"},{"Name":"PussyDark2","Group":"Pussy","Color":"Default"},{"Name":"MetalChastityBelt","Group":"ItemPelvis","Color":"Default"},{"Name":"Bra1","Group":"Bra","Color":"#bbbbbb"},{"Name":"Panties1","Group":"Panties","Color":"#bbbbbb"},{"Name":"Socks1","Group":"Socks","Color":"#bbbbbb"},{"Name":"Shoes1","Group":"Shoes","Color":"Default"},{"Name":"LeatherCollar","Group":"ItemNeck","Color":"Default"},{"Name":"CollegeOutfit1","Group":"Cloth","Color":"Default"},{"Name":"HairFront6","Group":"HairFront","Color":"#dddddd"}],"Money":"104","Owner":"NPC-Amanda","Lover":"NPC-Jennifer","Reputation":[{"Type":"Dominant","Value":"-55"},{"Type":"Maid","Value":"50"}]}
\ No newline at end of file
diff --git a/BondageClub/Screens/Character/Creation/Creation.js b/BondageClub/Screens/Character/Creation/Creation.js
index 172ab99cbb..c09e666419 100644
--- a/BondageClub/Screens/Character/Creation/Creation.js
+++ b/BondageClub/Screens/Character/Creation/Creation.js
@@ -69,29 +69,29 @@ function CreationLoad() {
 function CreationRun() {
 	
 	// Places the controls on the screen
-	document.getElementById("InputCharacter").setAttribute("style", "font-size:" + (MainCanvas.width / 50) + "px; font-family:Arial; position:absolute; padding-left:10px; left:50%; top:" + (window.innerHeight / 2 + MainCanvas.height * -0.35) + "px; width:" + (MainCanvas.width / 4) + "px; height:" + (MainCanvas.width / 40) + "px;");
-	document.getElementById("InputName").setAttribute("style", "font-size:" + (MainCanvas.width / 50) + "px; font-family:Arial; position:absolute; padding-left:10px; left:50%; top:" + (window.innerHeight / 2 + MainCanvas.height * -0.22) + "px; width:" + (MainCanvas.width / 4) + "px; height:" + (MainCanvas.width / 40) + "px;");
-	document.getElementById("InputPassword1").setAttribute("style", "font-size:" + (MainCanvas.width / 50) + "px; font-family:Arial; position:absolute; padding-left:10px; left:50%; top:" + (window.innerHeight / 2 + MainCanvas.height * -0.09) + "px; width:" + (MainCanvas.width / 4) + "px; height:" + (MainCanvas.width / 40) + "px;");
-	document.getElementById("InputPassword2").setAttribute("style", "font-size:" + (MainCanvas.width / 50) + "px; font-family:Arial; position:absolute; padding-left:10px; left:50%; top:" + (window.innerHeight / 2 + MainCanvas.height * 0.04) + "px; width:" + (MainCanvas.width / 4) + "px; height:" + (MainCanvas.width / 40) + "px;");
-	document.getElementById("InputEmail").setAttribute("style", "font-size:" + (MainCanvas.width / 50) + "px; font-family:Arial; position:absolute; padding-left:10px; left:50%; top:" + (window.innerHeight / 2 + MainCanvas.height * 0.17) + "px; width:" + (MainCanvas.width / 4) + "px; height:" + (MainCanvas.width / 40) + "px;");
+	DrawElementPosition("InputCharacter", 1250, 175, 500);
+	DrawElementPosition("InputName", 1250, 305, 500);
+	DrawElementPosition("InputPassword1", 1250, 435, 500);
+	DrawElementPosition("InputPassword2", 1250, 565, 500);
+	DrawElementPosition("InputEmail", 1250, 695, 500);
 		
 	// Draw the character, the labels and buttons
 	if (CreationMessage == "") CreationMessage = TextGet("EnterAccountCharacterInfo");
 	DrawCharacter(Player, 500, 0, 1);
-	DrawText(CreationMessage, 1267, 50, "White", "Black");
-	DrawText(TextGet("CharacterName"), 1267, 120, "White", "Black");
-	DrawText(TextGet("AccountName"), 1267, 250, "White", "Black");
-	DrawText(TextGet("Password"), 1267, 380, "White", "Black");
-	DrawText(TextGet("ConfirmPassword"), 1267, 510, "White", "Black");
-	DrawText(TextGet("Email"), 1267, 640, "White", "Black");
-	DrawButton(1080, 820, 370, 60, TextGet("CreateAccount"), "White", "");
+	DrawText(CreationMessage, 1250, 50, "White", "Black");
+	DrawText(TextGet("CharacterName"), 1250, 120, "White", "Black");
+	DrawText(TextGet("AccountName"), 1250, 250, "White", "Black");
+	DrawText(TextGet("Password"), 1250, 380, "White", "Black");
+	DrawText(TextGet("ConfirmPassword"), 1250, 510, "White", "Black");
+	DrawText(TextGet("Email"), 1250, 640, "White", "Black");
+	DrawButton(1050, 825, 400, 60, TextGet("CreateAccount"), "White", "");
 	DrawText(TextGet("AccountAlreadyExists"), 1180, 950, "White", "Black");
 	DrawButton(1440, 920, 120, 60, TextGet("Login"), "White", "");
 	
 	// Draw the importation check box
 	if (ImportBondageCollegeData != null) {
-		DrawText(TextGet("ImportBondageCollege"), 1217, 774, "White", "Black");
-		DrawButton(1480, 740, 64, 64, "", "White", ImportBondageCollegeData ? "Icons/Checked.png" : "");
+		DrawText(TextGet("ImportBondageCollege"), 1217, 783, "White", "Black");
+		DrawButton(1480, 750, 64, 64, "", "White", ImportBondageCollegeData ? "Icons/Checked.png" : "");
 	}
 
 }
@@ -124,7 +124,7 @@ function CreationResponse(CharacterData) {
 function CreationClick() {
 
 	// If we must check or uncheck the importation checkbox
-	if ((MouseX >= 1480) && (MouseX <= 1544) && (MouseY >= 740) && (MouseY <= 804) && (ImportBondageCollegeData != null))
+	if ((MouseX >= 1480) && (MouseX <= 1544) && (MouseY >= 750) && (MouseY <= 814) && (ImportBondageCollegeData != null))
 		ImportBondageCollegeData = !ImportBondageCollegeData;
 
 	// If we must go back to the login screen
@@ -138,7 +138,7 @@ function CreationClick() {
 	}
 	
 	// If we must try to create a new account
-	if ((MouseX >= 1080) && (MouseX <= 1450) && (MouseY >= 820) && (MouseY <= 880)) {
+	if ((MouseX >= 1050) && (MouseX <= 1450) && (MouseY >= 825) && (MouseY <= 885)) {
 		
 		// First, we make sure both passwords are the same
 		var CharacterName = document.getElementById("InputCharacter").value.trim();
diff --git a/BondageClub/Screens/Character/Login/GameCredits.csv b/BondageClub/Screens/Character/Login/GameCredits.csv
index 302d0237f4..9f31c496c5 100644
--- a/BondageClub/Screens/Character/Login/GameCredits.csv
+++ b/BondageClub/Screens/Character/Login/GameCredits.csv
@@ -20,7 +20,7 @@ Devil621
 
 CreditTypePatrons
 
-Ryner L.|simon b.
+simon b.|Ryner L.
 Mindtie|EugeneTooms
 Rashiash|Dick T.
 shadow|Sky L.
@@ -33,23 +33,27 @@ Designated|Ilsyra
 Jyeoh|Winterisbest
 Michal P.|Lasse T.
 Sivart!|Sanae X.
-That O.|Bob
-Rei H.|高辰昊
+Mark C.|CyLian
+Phillip T.|Hazel K.
+Fluffle P.|Hans M.
+光正 吴.|Ashley S.
+Robert R.|jacob g.
+Joseph J.|DarkJade
+robert|lewis s.
+Patrick L.|Punn P.
+Colin M.|That O.
+Bob|高辰昊
 Jesse Y.|Fin H.
-ExpertPlasma|Koluc
-Daan|Tommy D.
-Grimsbane|jacob g.
-Yagami Y.|Alan J.
+ExpertPlasma|Tommy D.
+Grimsbane|Alan J.
 Christopher L.|Yang K.
 Tom A.|Hemtai
 John M.|Ghost00001
-Adjarc|Ricky R.
-Carter S.|Brian R.
+Adjarc|Carter S.
 Matt P.|Mencoz
 Silly G.|devan
 Joshua T.|Chaos
 skylar|CAUI
-Phillip T.|Christopher T.
 DaWolf85|horngeek
 Soulgain|oymany
 arthus|VideogameBondag
@@ -62,41 +66,39 @@ Leon|PA
 Al S.|chi21204
 Some G.|Mitch
 P|Flying V.
-Raven N.|MaxFactor85
-MegaLucario5|Jakaa9
-Alexander J.|calrodsomething
-Apple A.|Billy T.
-Sean L.|Tai S.
-Reire M.|steven v.
-Shinonon|BinaryNerd
+MaxFactor85|MegaLucario5
+Jakaa9|Alexander J.
+calrodsomething|Apple A.
+Billy T.|Sean L.
+Tai S.|Reire M.
+steven v.|BinaryNerd
 Alan R.|JOSH C.
-trbt|Thomas
-Karl P.|tetris245
-Destroyer-x|Garreth W.
-Apoloris98|Amagiri Y.
-john w.|Oni
-Erik L.|Michael L.
-Hunter M.|Jared s.
-Dessed|天河
-Jinx|bla_rg
-Michael I.|hiddenlotus555
-Julio E.|Lukas B.
-Yoshoki|1073522
-Simon W.|flydeath
-KBgamer2010|CuvyanTaylor
-HXH|Gopanka
-Zack|Keso
-Noah J.|Ff7sfm
-thomas|nubbs99
-Lukas Z.|Bumurmum
-Ediger|Steve J.
-Nathaniel W.|Denis S.
-Blackfur|Dan S.
-Mike W.|Gust R.
-Adriano8727|brunayla
-Ryan K.|Vkad 6.
-Alfredo A.|Kurami-
-Winnie|Michael F.
+trbt|Karl P.
+tetris245|Destroyer-x
+Garreth W.|Apoloris98
+Amagiri Y.|john w.
+Oni|Erik L.
+Michael L.|Hunter M.
+Jared s.|Dessed
+天河|Jinx
+bla_rg|Michael I.
+hiddenlotus555|Julio E.
+Lukas B.|Yoshoki
+1073522|Simon W.
+flydeath|KBgamer2010
+CuvyanTaylor|HXH
+Gopanka|Zack
+Keso|Noah J.
+Ff7sfm|thomas
+nubbs99|Lukas Z.
+Bumurmum|Ediger
+Steve J.|Nathaniel W.
+Denis S.|Blackfur
+Dan S.|Mike W.
+Gust R.|Adriano8727
+brunayla|Ryan K.
+Vkad 6.|Alfredo A.
+Kurami-|Winnie
 Kuroham|Joseph M.
 DARKSIDE W.|smack54
 Sean M.|Jose
@@ -121,25 +123,28 @@ Robert|Daniel W.
 Lilian B.|Stanley F.
 Barbehenn|Stargat53
 Lovebdg1|Jörn P.
-plicoc|Punn P.
-C|Bryce R.
-adokilume|Slash
-target|gottspende
-What E.|Stefano
-Rafael R.|Harry J.
-Trosan|Kitten
-Trololol|David R.
-AJ22|AleX
-Sumeroda|Joel A.
-Triassik|ClockALock
-韩旭东|roulio12
-ElCorro|Lukas G.
-egadonb|Meyer
-Oren B.|Afituz I.
-Raven-rj|Zongus763
+David R.|Magnus O.
+plicoc|C
+Bryce R.|adokilume
+Slash|target
+gottspende|What E.
+Stefano|Rafael R.
+Koluc|Wafflehead
+Yagami Y.|AJ22
+Delescious S.|DJZ
+mebiusmax|Christopher T.
+Hans F.|Jake h.
+Harry J.|Trosan
+Kitten|Nommitty
+AleX|Sumeroda
+Joel A.|Triassik
+ClockALock|韩旭东
+roulio12|ElCorro
+Lukas G.|egadonb
+Meyer|Oren B.
+Afituz I.|Raven-rj
 Jack S.|dale r.
-Azikela|Alpha
-Escaperobe|Magnus O.
+Alpha|Escaperobe
 pat|Leonardo P.
 jukehero461|lemonda
 Littleshiro-kun|Christopher W.
diff --git a/BondageClub/Screens/Character/Login/Login.js b/BondageClub/Screens/Character/Login/Login.js
index bdc04f330b..b3d7de22b8 100644
--- a/BondageClub/Screens/Character/Login/Login.js
+++ b/BondageClub/Screens/Character/Login/Login.js
@@ -99,9 +99,9 @@ function LoginRun() {
 	DrawText(TextGet("Welcome"), 1000, 50, "White", "Black");
 	DrawText(LoginMessage, 1000, 100, "White", "Black");
 	DrawText(TextGet("AccountName"), 1000, 200, "White", "Black");
-	DrawElementPosition("InputName", 1000, 275, 500);
+	DrawElementPosition("InputName", 1000, 260, 500);
 	DrawText(TextGet("Password"), 1000, 350, "White", "Black");
-	DrawElementPosition("InputPassword", 1000, 425, 500);
+	DrawElementPosition("InputPassword", 1000, 410, 500);
 	DrawButton(925, 500, 150, 60, TextGet("Login"), "White", "");
 	DrawText(TextGet("CreateNewCharacter"), 1000, 670, "White", "Black");
 	DrawButton(850, 740, 300, 60, TextGet("NewCharacter"), "White", "");
diff --git a/BondageClub/Screens/MiniGame/MaidCleaning/MaidCleaning.js b/BondageClub/Screens/MiniGame/MaidCleaning/MaidCleaning.js
index 0811638781..af989eaaf7 100644
--- a/BondageClub/Screens/MiniGame/MaidCleaning/MaidCleaning.js
+++ b/BondageClub/Screens/MiniGame/MaidCleaning/MaidCleaning.js
@@ -43,7 +43,7 @@ function MaidCleaningLoad() {
 	// The higher the difficulty, the more spots there will be (less spots on mobile since we cannot swipe the mouse)
 	MaidCleaningPlayerX = 500;
 	MaidCleaningPlayerY = 0;
-	var Factor = (CommonIsMobile) ? 0.5 : 1;
+	var Factor = (CommonIsMobile) ? 0.25 : 1;
 	var MaxSpot = 220 * Factor;
 	if (MiniGameDifficulty == "Normal") MaxSpot = 360 * Factor;
 	if (MiniGameDifficulty == "Hard") MaxSpot = 500 * Factor;
@@ -88,11 +88,12 @@ function MaidCleaningDoMove() {
 		// Sets the player position		
 		MaidCleaningPlayerX = MouseX - 500;
 		MaidCleaningPlayerY = MouseY - 500;
+		var Range = ((CommonIsMobile) ? (MaidCleaningSpotSize / 1.5) : (MaidCleaningSpotSize / 2));
 
 		// If the game has started, we check the click position and remove a spot at that position
 		if (!MiniGameEnded)
 			for(var S = 0; S < MaidCleaningSpots.length; S++)
-				if ((MouseX >= MaidCleaningSpots[S].X - (MaidCleaningSpotSize / 2)) && (MouseX <= MaidCleaningSpots[S].X + (MaidCleaningSpotSize / 2)) && (MouseY >= MaidCleaningSpots[S].Y - (MaidCleaningSpotSize / 2)) && (MouseY <= MaidCleaningSpots[S].Y + (MaidCleaningSpotSize / 2))) {
+				if ((MouseX >= MaidCleaningSpots[S].X - Range) && (MouseX <= MaidCleaningSpots[S].X + Range) && (MouseY >= MaidCleaningSpots[S].Y - Range) && (MouseY <= MaidCleaningSpots[S].Y + Range)) {
 					if (MaidCleaningSpots[S].T == 1) MaidCleaningSpots.splice(S, 1);
 					else MaidCleaningSpots[S].T--;
 					return;
diff --git a/BondageClub/Screens/Room/Introduction/Dialog_NPC_Introduction_Maid_EN.csv b/BondageClub/Screens/Room/Introduction/Dialog_NPC_Introduction_Maid_EN.csv
index ec79bb08b9..a664d296fb 100644
--- a/BondageClub/Screens/Room/Introduction/Dialog_NPC_Introduction_Maid_EN.csv
+++ b/BondageClub/Screens/Room/Introduction/Dialog_NPC_Introduction_Maid_EN.csv
@@ -1,6 +1,6 @@
 PlayerGagged,,,Communicating with a gag is quite hard.  You'll need to remove it to chat.,,
 ReleaseHeadMaid,,,"Of course, head maid DialogPlayerName.  (She releases you.)",,
-ItemMouth,,,"(Her eyes widen when she sees the gag, but she doesn't resist as you silence her.)",,
+ItemMouth,,,"(She first shakes her head to avoid the gag, but finally surrenders as you silence her.)",,
 RemoveItemMouth,,,"(You remove her gag while she stretches her mouth.)  Thanks, it's hard to introduce newcomers with that gag.",,
 ItemArms,,,(She sighs and turns around while you restrain her arms.)  It might be a little hard to work like that Miss.,,
 RemoveItemArms,,,"(You free her arms and she nods slowly.)  Thanks a lot Miss, this is much better.",,
diff --git a/BondageClub/Screens/Room/MaidQuarters/Dialog_NPC_MaidQuarters_Maid_EN.csv b/BondageClub/Screens/Room/MaidQuarters/Dialog_NPC_MaidQuarters_Maid_EN.csv
index 9c614e1bda..febe7f1f35 100644
--- a/BondageClub/Screens/Room/MaidQuarters/Dialog_NPC_MaidQuarters_Maid_EN.csv
+++ b/BondageClub/Screens/Room/MaidQuarters/Dialog_NPC_MaidQuarters_Maid_EN.csv
@@ -8,7 +8,7 @@ MaidCleaningVictory,,,(DialogCharacterName gets you back to the maid quarters an
 MaidCleaningDefeat,,,(DialogCharacterName gets you back to the maid quarters and frowns.)  You failed to clean up in time.,,
 MaidInitiationTransition,,,(DialogCharacterName hugs you and gropes your red butt.)  You're now a full maid my sister.,,
 CantReleasePlayer,,,I'm sorry Miss.  I cannot help you.,,
-ItemMouth,,,"(Her eyes widen when she sees the gag, but she submits while you silence her.)",,
+ItemMouth,,,"(She first shakes her head to avoid the gag, but finally surrenders as you silence her.)",,
 RemoveItemMouth,,,"(You remove her gag while she stretches her mouth.)  Thanks Miss, it's hard to dispatch maids with that gag.",,
 ItemArms,,,(She sighs and turns around while you restrain her arms.)  It might be a little hard to work like that Miss.,,
 RemoveItemArms,,,(You free her arms and she nods happily.)  Thanks a lot Miss.,,
diff --git a/BondageClub/Screens/Room/Shibari/Dialog_NPC_Shibari_Student_EN.csv b/BondageClub/Screens/Room/Shibari/Dialog_NPC_Shibari_Student_EN.csv
index 696ea95f2f..06fa02f8e0 100644
--- a/BondageClub/Screens/Room/Shibari/Dialog_NPC_Shibari_Student_EN.csv
+++ b/BondageClub/Screens/Room/Shibari/Dialog_NPC_Shibari_Student_EN.csv
@@ -11,7 +11,7 @@ RemoveSuspensionHempRope,,,(You untie the hemp rope from the ceiling and slowly
 RemoveItemFeet,,,(You release her feet and she jumps playfully.)  More bondage Miss?,,
 ItemNeck,,,"(You strap the collar on her neck while she frowns.)  I'm a free subbie Miss, I'm not looking for a collar.",,
 RemoveItemNeck,,,(You remove the collar around her neck.)  Much better!  I love bondage but I'm not ready to commit.,,
-ItemPelvis,,,(Her eyes widen as she sees the device.  She struggles while you lock it on her.),,
+ItemPelvis,,,(She rocks her hips and struggles as you lock the device on her.),,
 RemoveItemPelvis,,,(She seems relieved as you unlock the device.)  Domo arigato Miss DialogPlayerName.,,
 ItemTorso,,,(You prepare a full body harness on her torso as she blushes.)  This is very erotic.,,
 RemoveItemTorso,,,"(You remove the body harness from her torso.)  Too bad, it was both kinky and comfy.",,
diff --git a/BondageClub/Scripts/Common.js b/BondageClub/Scripts/Common.js
index e1a4658d72..631fd80c39 100644
--- a/BondageClub/Scripts/Common.js
+++ b/BondageClub/Scripts/Common.js
@@ -117,6 +117,16 @@ function CommonClick() {
 		DialogClick();
 }
 
+// Catches the clicks on the main screen and forwards it to the current screen or dialog screen
+function CommonKeyDown() {	
+	if (CurrentCharacter == null) {
+		if (eval("typeof " + CurrentScreen + "KeyDown") == "function")
+			CommonDynamicFunction(CurrentScreen + "KeyDown()");
+	}
+	else 
+		DialogKeyDown();
+}
+
 // Calls a dynamic function (if it exists)
 function CommonDynamicFunction(FunctionName) {
 	if (typeof window[FunctionName.substr(0, FunctionName.indexOf("("))] == "function") {
diff --git a/BondageClub/Scripts/Dialog.js b/BondageClub/Scripts/Dialog.js
index 8f910c6153..2db754b034 100644
--- a/BondageClub/Scripts/Dialog.js
+++ b/BondageClub/Scripts/Dialog.js
@@ -8,6 +8,7 @@ var DialogProgressOperation = "...";
 var DialogProgressPrevItem = null;
 var DialogProgressNextItem = null;
 var DialogProgressSkill = 0;
+var DialogProgressLastKeyPress = 0;
 var DialogInventory = [];
 
 function DialogReputationLess(RepType, Value) { return (ReputationGet(RepType) <= Value); } // Returns TRUE if a specific reputation type is less or equal than a given value
@@ -177,12 +178,17 @@ function DialogProgressStart(C, PrevItem, NextItem) {
 	DialogProgressNextItem = NextItem;
 	DialogProgressOperation = DialogProgressGetOperation(PrevItem, NextItem);
 	DialogProgressSkill = Timer;
+	DialogProgressLastKeyPress = 0;
 
 }
 
 // The player can use the space bar to speed up the dialog progress, just like clicking
 function DialogKeyDown() {
-	if ((KeyPress == 32) && (DialogProgress >= 0)) DialogProgress = DialogProgress + DialogProgressClick;
+	if (((KeyPress == 65) || (KeyPress == 83) || (KeyPress == 97) || (KeyPress == 115)) && (DialogProgress >= 0)) {
+		DialogProgress = DialogProgress + DialogProgressClick * ((DialogProgressLastKeyPress == KeyPress) ? -0.5 : 0.5);
+		if (DialogProgress < 0) DialogProgress = 0;
+		DialogProgressLastKeyPress = KeyPress;
+	}
 }
 
 // When the user clicks on a dialog option
@@ -384,7 +390,7 @@ function DialogDrawItemMenu(C) {
 			// Draw the current operation and progress
 			DrawText(DialogProgressOperation, 1500, 650, "White", "Black");
 			DrawProgressBar(1200, 700, 600, 100, DialogProgress);
-			DrawText((CommonIsMobile) ? "Click here to speed up the progress" : "Click here or hit the space bar to speed up", 1500, 900, "White", "Black");
+			DrawText((CommonIsMobile) ? "Click here to speed up the progress" : "Click here or hit keys A and S to speed up", 1500, 900, "White", "Black");
 
 			// If the operation is completed
 			if (DialogProgress >= 100) {
diff --git a/BondageClub/Scripts/Drawing.js b/BondageClub/Scripts/Drawing.js
index 6fa4bd674f..c8628dfcdc 100644
--- a/BondageClub/Scripts/Drawing.js
+++ b/BondageClub/Scripts/Drawing.js
@@ -411,16 +411,16 @@ function DrawElementPosition(ElementID, X, Y, W) {
 	// Different positions based on the width/height ratio
 	if (DrawScreenWidth <= DrawScreenHeight * 2) {
 		Font = (DrawScreenWidth / 50);
-		Height = Font * 1.2;
+		Height = Font * 1.15;
 		Left = ((X - (W / 2)) * DrawScreenWidth / 2000);
-		Width = (W * DrawScreenWidth / 2000) - 10;
-		Top = (Y * DrawScreenWidth / 2000) + ((DrawScreenHeight * 2 - DrawScreenWidth) / 4) - (Height / 2) - 8;
+		Width = (W * DrawScreenWidth / 2000) - 18;
+		Top = (Y * DrawScreenWidth / 2000) + ((DrawScreenHeight * 2 - DrawScreenWidth) / 4) - (Height / 2);
 	} else {
 		Font = (DrawScreenHeight / 25);
-		Height = Font * 1.2;
+		Height = Font * 1.15;
 		Left = ((X - (W / 2)) * DrawScreenHeight / 1000) + (DrawScreenWidth - DrawScreenHeight * 2) / 2;
 		Width = (W * DrawScreenHeight / 1000) - 18;
-		Top = (Y * DrawScreenHeight / 1000) - (Height / 2) - 8;
+		Top = (Y * DrawScreenHeight / 1000) - (Height / 2);
 	}
 
 	// Sets the element style
diff --git a/BondageClub/index.html b/BondageClub/index.html
index 101d6143ef..ffb6e149e1 100644
--- a/BondageClub/index.html
+++ b/BondageClub/index.html
@@ -84,8 +84,7 @@ function MainRun() {
 // When the user presses a key, we send the KeyDown event to the current screen if it can accept it
 function KeyDown(event) {
 	KeyPress = event.keyCode || event.which;
-	if (eval("typeof " + CurrentScreen + "KeyDown") == "function")
-		CommonDynamicFunction(CurrentScreen + "KeyDown()");
+	CommonKeyDown();
 }
 
 // When the user clicks, we fire the click event for other screens
diff --git a/C000_Intro/ChapterSelect/GameCredits.csv b/C000_Intro/ChapterSelect/GameCredits.csv
index 302d0237f4..9f31c496c5 100644
--- a/C000_Intro/ChapterSelect/GameCredits.csv
+++ b/C000_Intro/ChapterSelect/GameCredits.csv
@@ -20,7 +20,7 @@ Devil621
 
 CreditTypePatrons
 
-Ryner L.|simon b.
+simon b.|Ryner L.
 Mindtie|EugeneTooms
 Rashiash|Dick T.
 shadow|Sky L.
@@ -33,23 +33,27 @@ Designated|Ilsyra
 Jyeoh|Winterisbest
 Michal P.|Lasse T.
 Sivart!|Sanae X.
-That O.|Bob
-Rei H.|高辰昊
+Mark C.|CyLian
+Phillip T.|Hazel K.
+Fluffle P.|Hans M.
+光正 吴.|Ashley S.
+Robert R.|jacob g.
+Joseph J.|DarkJade
+robert|lewis s.
+Patrick L.|Punn P.
+Colin M.|That O.
+Bob|高辰昊
 Jesse Y.|Fin H.
-ExpertPlasma|Koluc
-Daan|Tommy D.
-Grimsbane|jacob g.
-Yagami Y.|Alan J.
+ExpertPlasma|Tommy D.
+Grimsbane|Alan J.
 Christopher L.|Yang K.
 Tom A.|Hemtai
 John M.|Ghost00001
-Adjarc|Ricky R.
-Carter S.|Brian R.
+Adjarc|Carter S.
 Matt P.|Mencoz
 Silly G.|devan
 Joshua T.|Chaos
 skylar|CAUI
-Phillip T.|Christopher T.
 DaWolf85|horngeek
 Soulgain|oymany
 arthus|VideogameBondag
@@ -62,41 +66,39 @@ Leon|PA
 Al S.|chi21204
 Some G.|Mitch
 P|Flying V.
-Raven N.|MaxFactor85
-MegaLucario5|Jakaa9
-Alexander J.|calrodsomething
-Apple A.|Billy T.
-Sean L.|Tai S.
-Reire M.|steven v.
-Shinonon|BinaryNerd
+MaxFactor85|MegaLucario5
+Jakaa9|Alexander J.
+calrodsomething|Apple A.
+Billy T.|Sean L.
+Tai S.|Reire M.
+steven v.|BinaryNerd
 Alan R.|JOSH C.
-trbt|Thomas
-Karl P.|tetris245
-Destroyer-x|Garreth W.
-Apoloris98|Amagiri Y.
-john w.|Oni
-Erik L.|Michael L.
-Hunter M.|Jared s.
-Dessed|天河
-Jinx|bla_rg
-Michael I.|hiddenlotus555
-Julio E.|Lukas B.
-Yoshoki|1073522
-Simon W.|flydeath
-KBgamer2010|CuvyanTaylor
-HXH|Gopanka
-Zack|Keso
-Noah J.|Ff7sfm
-thomas|nubbs99
-Lukas Z.|Bumurmum
-Ediger|Steve J.
-Nathaniel W.|Denis S.
-Blackfur|Dan S.
-Mike W.|Gust R.
-Adriano8727|brunayla
-Ryan K.|Vkad 6.
-Alfredo A.|Kurami-
-Winnie|Michael F.
+trbt|Karl P.
+tetris245|Destroyer-x
+Garreth W.|Apoloris98
+Amagiri Y.|john w.
+Oni|Erik L.
+Michael L.|Hunter M.
+Jared s.|Dessed
+天河|Jinx
+bla_rg|Michael I.
+hiddenlotus555|Julio E.
+Lukas B.|Yoshoki
+1073522|Simon W.
+flydeath|KBgamer2010
+CuvyanTaylor|HXH
+Gopanka|Zack
+Keso|Noah J.
+Ff7sfm|thomas
+nubbs99|Lukas Z.
+Bumurmum|Ediger
+Steve J.|Nathaniel W.
+Denis S.|Blackfur
+Dan S.|Mike W.
+Gust R.|Adriano8727
+brunayla|Ryan K.
+Vkad 6.|Alfredo A.
+Kurami-|Winnie
 Kuroham|Joseph M.
 DARKSIDE W.|smack54
 Sean M.|Jose
@@ -121,25 +123,28 @@ Robert|Daniel W.
 Lilian B.|Stanley F.
 Barbehenn|Stargat53
 Lovebdg1|Jörn P.
-plicoc|Punn P.
-C|Bryce R.
-adokilume|Slash
-target|gottspende
-What E.|Stefano
-Rafael R.|Harry J.
-Trosan|Kitten
-Trololol|David R.
-AJ22|AleX
-Sumeroda|Joel A.
-Triassik|ClockALock
-韩旭东|roulio12
-ElCorro|Lukas G.
-egadonb|Meyer
-Oren B.|Afituz I.
-Raven-rj|Zongus763
+David R.|Magnus O.
+plicoc|C
+Bryce R.|adokilume
+Slash|target
+gottspende|What E.
+Stefano|Rafael R.
+Koluc|Wafflehead
+Yagami Y.|AJ22
+Delescious S.|DJZ
+mebiusmax|Christopher T.
+Hans F.|Jake h.
+Harry J.|Trosan
+Kitten|Nommitty
+AleX|Sumeroda
+Joel A.|Triassik
+ClockALock|韩旭东
+roulio12|ElCorro
+Lukas G.|egadonb
+Meyer|Oren B.
+Afituz I.|Raven-rj
 Jack S.|dale r.
-Azikela|Alpha
-Escaperobe|Magnus O.
+Alpha|Escaperobe
 pat|Leonardo P.
 jukehero461|lemonda
 Littleshiro-kun|Christopher W.