diff --git a/src/common/resources/lang/en_US/gui.lang b/src/common/resources/lang/en_US/gui.lang
index 3dd615c97..786e3e45b 100644
--- a/src/common/resources/lang/en_US/gui.lang
+++ b/src/common/resources/lang/en_US/gui.lang
@@ -217,9 +217,15 @@ gui.options.page.language_packs.category.language_packs=Language Packs
 gui.options.page.language_packs.button.open_folder=Open Folder
 
 gui.options.page.debug.title=Debug Menu
+gui.options.page.debug.category.controls=Debug Controls
+gui.options.page.debug.category.utility=Utilities
+gui.options.page.debug.category.settings=Settings
+gui.options.page.debug.category.test=Tests
 gui.options.page.debug.button.open.model_viewer=Open Model Viewer
 gui.options.page.debug.button.open.biome_finder=Open Biome Finder
 gui.options.page.debug.button.open.datadumper=Run Data Dumper
+gui.options.page.debug.button.crash.soft=Crash Soft
+gui.options.page.debug.button.crash.hard=Crash Hard
 
 gui.options.page.search.title=Search
 
diff --git a/src/common/resources/lang/en_US/options.lang b/src/common/resources/lang/en_US/options.lang
index 32adcf2ad..9afc8e436 100644
--- a/src/common/resources/lang/en_US/options.lang
+++ b/src/common/resources/lang/en_US/options.lang
@@ -130,6 +130,8 @@ options.renderScale.scale_100=1x
 options.renderScale.scale_200=2x
 options.heatHaze=Heat Haze
 options.showCollisionBoxes=Show Collision Boxes
+options.showDebugScreen=Show Debug Screen
+options.showFrameTimes=Show Frame Times
 options.showChunkBorders=Show Chunk Borders
 options.pauseOnLostFocus=Pause on Lost Focus
 options.smoothCamera=Cinematic Camera
@@ -152,6 +154,16 @@ options.lightmapStyle.gray=Grayscale
 options.lightmapStyle.colorized=Colorized
 options.lightmapStyle.disabled=Disabled
 options.customLightmap=Custom Lightmap
+options.old=Old Menu
+options.lockCamera=Lock Camera
+options.disableJInput=Disable JInput
+options.disableCrashHandler=Disable Crash Handler
+options.disableResize=Disable Resize
+options.startInFullscreen=Start In Fullscreen
+options.disableShaders=Disable Shaders
+options.loadAllSounds=Load All Sounds
+options.allowSoundOverrides=Allow Sound Overrides
+options.downloadSoundfiles=Download Sound Files
 
 options.tooltipStyle.default=Default
 options.tooltipStyle.modern=Modern
@@ -220,4 +232,18 @@ key.toggleDebug=Toggle Debug
 key.toggleOverlay=Toggle Overlays
 key.sortInventory=Sort Inventory
 key.disabled=Disabled
-key.debug.textureAtlas=Show Texture Atlas
\ No newline at end of file
+key.debug.textureAtlas=Show Texture Atlas
+key.debug.reload=Reload textures
+key.debug.gamemode=Switch gamemode
+key.debug.dumptextures=Dump textures
+key.debug.fullbright=Toggle fullbright
+key.debug.lightmap=Cycle lightmaps
+key.debug.collision=Show collision boxes
+key.debug.chunkborders=Show chunk borders
+key.debug.clearchat=Clear Chat
+key.debug.pauseFocus=Pause on lost focus
+key.debug.iteminfo=Show extra item info
+key.debug.reloadchunks=Reload chunks
+key.debug.smoothlighting=Toggle smooth lighting
+key.debug.releasecursor=Release Cursor
+key.debug.shortcuts=Show keyboard shortcuts
\ No newline at end of file
diff --git a/src/common/resources/lang/en_US/tips.txt b/src/common/resources/lang/en_US/tips.txt
index 3dd5c3af6..e19432969 100644
--- a/src/common/resources/lang/en_US/tips.txt
+++ b/src/common/resources/lang/en_US/tips.txt
@@ -3,7 +3,7 @@ Portals can be as large (or small) as you want.
 The Trommel lets you turn useless dirt into valuable resources.
 Cherry trees bloom in spring.
 Leather boots keep your crops safe from trampling.
-Seasons change every 7 days.
+Seasons change every 14 days.
 Items fall through mesh blocks.
 Blast furnaces smelt faster than regular ones.
 Press %key.fly to fly in creative.
diff --git a/src/main/java/net/minecraft/client/Minecraft.java b/src/main/java/net/minecraft/client/Minecraft.java
index 856451543..508df708d 100644
--- a/src/main/java/net/minecraft/client/Minecraft.java
+++ b/src/main/java/net/minecraft/client/Minecraft.java
@@ -6,6 +6,7 @@ import static org.lwjgl.opengl.GL11.*;
 import java.io.File;
 import java.io.IOException;
 import java.util.ArrayList;
+import java.util.Comparator;
 import java.util.Random;
 
 import net.minecraft.client.gui.guidebook.GuiGuidebook;
@@ -1335,10 +1336,10 @@ public class Minecraft
                 	thePlayer.input.keyEvent(Keyboard.getEventKey(), Keyboard.getEventKeyState());
                 }
                 
-                if(gameSettings.keyToggleDebug.isPressEvent(InputDevice.keyboard)) {
+                if(gameSettings.keyToggleDebug.isPressEvent()) {
                     f3Press = true;
                 }
-                if (gameSettings.keyToggleDebug.isReleaseEvent(InputDevice.keyboard))
+                if (gameSettings.keyToggleDebug.isReleaseEvent())
                 {
                     if(f3Press)
                     {
@@ -1354,7 +1355,7 @@ public class Minecraft
                         f3Press = false;
                     }
                 }
-                
+
                 if(Keyboard.getEventKeyState())
                 {
                     if(Keyboard.getEventKey() == Keyboard.KEY_F11)
@@ -1367,25 +1368,18 @@ public class Minecraft
                         {
                             if(Keyboard.getEventKey() == Keyboard.KEY_Q) {
                                 ingameGUI.addChatMessage(TextFormatting.YELLOW + "Keyboard shortcuts: ");
-                                ingameGUI.addChatMessage("F3 + A: Reload chunks");
-                                ingameGUI.addChatMessage("F3 + C: Clear chat");
-                                ingameGUI.addChatMessage("F3 + D: Dump textures");
-                                ingameGUI.addChatMessage("F3 + F: Toggle fullbright");
-                                ingameGUI.addChatMessage("F3 + G: Show chunk borders");
-                                ingameGUI.addChatMessage("F3 + H: Toggle item durability");
-                                ingameGUI.addChatMessage("F3 + L: Toggle lightmap");
-                                ingameGUI.addChatMessage("F3 + N: Switch gamemode");
-                                ingameGUI.addChatMessage("F3 + P: Toggle pause on lost focus");
-                                ingameGUI.addChatMessage("F3 + R: Reload");
-                                ingameGUI.addChatMessage("F3 + S: Toggle smooth lighting");
-                                ingameGUI.addChatMessage("F3 + B: Debug collision boxes");
-                                ingameGUI.addChatMessage("F12: Release cursor");
+                                gameSettings.debugsKeys.sort(Comparator.comparing(KeyBinding::getKeyName));
+                                for (KeyBinding binding: gameSettings.debugsKeys){
+                                    ingameGUI.addChatMessage(String.format("%s + %s: %s", gameSettings.keyToggleDebug.getKeyName(), binding.getKeyName(), I18n.getInstance().translateKey(binding.getId())));
+                                }
+                                ingameGUI.addChatMessage(String.format("%s: %s", gameSettings.keyToggleTextureAtlas.getKeyName(), I18n.getInstance().translateKey(gameSettings.keyToggleTextureAtlas.getId())));
+                                ingameGUI.addChatMessage(String.format("%s: %s", gameSettings.keyReleaseCursor.getKeyName(), I18n.getInstance().translateKey(gameSettings.keyReleaseCursor.getId())));
                             }
-                            if (Keyboard.getEventKey() == Keyboard.KEY_R)
+                            if (gameSettings.keyReload.isPressEvent())
                             {
                                 forceReload();
                             }
-                            else if(Keyboard.getEventKey() == Keyboard.KEY_N)
+                            else if(gameSettings.keySwitchGamemode.isPressEvent())
                             {
                                 if (theWorld.getLevelData().getCheatsEnabled() || theWorld.isClientSide)
                                 {
@@ -1399,11 +1393,11 @@ public class Minecraft
                                     }
                                 }
                             }
-                            else if(Keyboard.getEventKey() == Keyboard.KEY_D)
+                            else if(gameSettings.keyDumpTextures.isPressEvent())
                             {
                                 Textures.dumpTextures();
                             }
-                            else if (Keyboard.getEventKey() == Keyboard.KEY_F)
+                            else if (gameSettings.keyFullbright.isPressEvent())
                             {
                                 NetClientHandler queue = getSendQueue();
 
@@ -1414,7 +1408,7 @@ public class Minecraft
                                     {
                                         fullbright = !fullbright;
                                         if(!LightmapHelper.isLightmapEnabled()) {
-                                        	renderGlobal.loadRenderers();	
+                                        	renderGlobal.loadRenderers();
                                         }
                                     }
                                 }
@@ -1424,13 +1418,13 @@ public class Minecraft
                                     {
                                         fullbright = !fullbright;
                                         if(!LightmapHelper.isLightmapEnabled()) {
-                                        	renderGlobal.loadRenderers();	
+                                        	renderGlobal.loadRenderers();
                                         }
                                     }
                                 }
                                 ingameGUI.guiHeldItemTooltip.setString("Fullbright: " + (fullbright ? "On" : "Off"));
                             }
-                            else if (Keyboard.getEventKey() == Keyboard.KEY_L)
+                            else if (gameSettings.keyLightmaps.isPressEvent())
                             {
                             	if(gameSettings.lightmapStyle.value == LightmapStyle.DISABLED) {
                             		gameSettings.lightmapStyle.value = LightmapStyle.GRAY;
@@ -1442,43 +1436,43 @@ public class Minecraft
                             		renderGlobal.loadRenderers();
                             	}
                             }
-                            else if (Keyboard.getEventKey() == Keyboard.KEY_B)
+                            else if (gameSettings.keyCollisionBoxes.isPressEvent())
                             {
                             	gameSettings.showCollisionBoxes.toggle();
                                 ingameGUI.guiHeldItemTooltip.setOptionNameAndValueString(gameSettings.showCollisionBoxes);
                             }
-                            else if (Keyboard.getEventKey() == Keyboard.KEY_G)
+                            else if (gameSettings.keyChunkBorders.isPressEvent())
                             {
                             	gameSettings.showChunkBorders.toggle();
                                 ingameGUI.guiHeldItemTooltip.setOptionNameAndValueString(gameSettings.showChunkBorders);
                             }
-                            else if (Keyboard.getEventKey() == Keyboard.KEY_C)
+                            else if (gameSettings.keyClearChat.isPressEvent())
                             {
                                 ingameGUI.clearChatMessages();
                             }
-                            else if (Keyboard.getEventKey() == Keyboard.KEY_P)
+                            else if (gameSettings.keyPauseLostFocus.isPressEvent())
                             {
                                 gameSettings.pauseOnLostFocus.toggle();
                                 ingameGUI.guiHeldItemTooltip.setOptionNameAndValueString(gameSettings.pauseOnLostFocus);
                             }
-                            else if (Keyboard.getEventKey() == Keyboard.KEY_H)
+                            else if (gameSettings.keyToggleItemInfo.isPressEvent())
                             {
                                 gameSettings.showItemDebugInfo.toggle();
                                 ingameGUI.guiHeldItemTooltip.setOptionNameAndValueString(gameSettings.showItemDebugInfo);
                             }
-                            else if (Keyboard.getEventKey() == Keyboard.KEY_A)
+                            else if (gameSettings.keyReloadChunks.isPressEvent())
                             {
                                 renderGlobal.loadRenderers();
                             }
-                            else if (Keyboard.getEventKey() == Keyboard.KEY_S)
+                            else if (gameSettings.keySmoothLighting.isPressEvent())
                             {
                                 gameSettings.ambientOcclusion.toggle();
                                 gameSettings.ambientOcclusion.onUpdate();
                                 ingameGUI.guiHeldItemTooltip.setOptionNameAndValueString(gameSettings.ambientOcclusion);
                             }
-                            if(!gameSettings.keyToggleDebug.isPressEvent(InputDevice.keyboard)) f3Press = false;
+                            if(!gameSettings.keyToggleDebug.isPressEvent()) f3Press = false;
                         }
-                        else if (Keyboard.getEventKey() == Keyboard.KEY_F12)
+                        else if (gameSettings.keyReleaseCursor.isPressEvent())
                         {
                             mouseInput.releaseCursor();
                         }
diff --git a/src/main/java/net/minecraft/client/gui/GuiIngameMenu.java b/src/main/java/net/minecraft/client/gui/GuiIngameMenu.java
index 8c6f53089..582577a94 100644
--- a/src/main/java/net/minecraft/client/gui/GuiIngameMenu.java
+++ b/src/main/java/net/minecraft/client/gui/GuiIngameMenu.java
@@ -5,6 +5,7 @@ import net.minecraft.client.gui.guidebook.GuiGuidebook;
 import net.minecraft.client.gui.guidebook.PageManager;
 import net.minecraft.client.gui.guidebook.search.SearchPage;
 import net.minecraft.client.gui.options.GuiOptions;
+import net.minecraft.client.gui.options.data.OptionsPages;
 import net.minecraft.core.data.registry.Registries;
 import net.minecraft.core.data.registry.recipe.SearchQuery;
 import net.minecraft.core.util.helper.MathHelper;
@@ -49,6 +50,9 @@ public class GuiIngameMenu extends GuiScreen
         }
         controlList.add(new GuiButton(5, width / 2 - 100, height / 4 + 48 + byte0, 98, 20, I18n.getInstance().translateKey("gui.ingame_menu.button.achievements")));
         controlList.add(new GuiButton(6, width / 2 + 2, height / 4 + 48 + byte0, 98, 20, I18n.getInstance().translateKey("gui.ingame_menu.button.statistics")));
+        GuiButton debugButton = new GuiButton(9, width - 8, height - 8, 8, 8, "");
+        debugButton.visible = false;
+        controlList.add(debugButton);
     }
 
     @Override
@@ -93,6 +97,9 @@ public class GuiIngameMenu extends GuiScreen
         {
             mc.displayGuiScreen(new GuiPhotoMode());
         }
+        if(button.id == 9){
+            mc.displayGuiScreen(new GuiOptions(this, OptionsPages.DEBUG));
+        }
     }
 
     @Override
diff --git a/src/main/java/net/minecraft/client/gui/options/components/ShortcutComponent.java b/src/main/java/net/minecraft/client/gui/options/components/ShortcutComponent.java
index 4e8e44ad8..aa26d6764 100644
--- a/src/main/java/net/minecraft/client/gui/options/components/ShortcutComponent.java
+++ b/src/main/java/net/minecraft/client/gui/options/components/ShortcutComponent.java
@@ -11,9 +11,9 @@ public class ShortcutComponent
     private static final int COMPONENT_SPACING = 2;
     private static final int BUTTON_WIDTH = 200;
 
-    private final String translationKey;
-    private final GuiButton button;
-    private final Runnable action;
+    protected final String translationKey;
+    protected final GuiButton button;
+    protected final Runnable action;
 
     public ShortcutComponent(String translationKey, Runnable action) {
         this.translationKey = translationKey;
@@ -36,6 +36,8 @@ public class ShortcutComponent
 
     @Override
     public void onMouseClick(int mouseButton, int x, int y, int width, int relativeMouseX, int relativeMouseY) {
+        button.xPosition = x + width / 2 - BUTTON_WIDTH / 2;
+        button.yPosition = y + COMPONENT_SPACING;
         if (button.mouseClicked(mc, x + relativeMouseX, y + relativeMouseY)) {
             mc.sndManager.playSound("random.click", SoundCategory.GUI_SOUNDS, 1.0F, 1.0F);
             action.run();
diff --git a/src/main/java/net/minecraft/client/gui/options/data/OptionsPages.java b/src/main/java/net/minecraft/client/gui/options/data/OptionsPages.java
index 3683e1d34..d88ca6e70 100644
--- a/src/main/java/net/minecraft/client/gui/options/data/OptionsPages.java
+++ b/src/main/java/net/minecraft/client/gui/options/data/OptionsPages.java
@@ -4,16 +4,27 @@ import net.betterthanadventure.utils.BiomeFinder;
 import net.betterthanadventure.utils.DataDumper;
 import net.minecraft.client.Minecraft;
 import net.minecraft.client.gui.GuiControllerSetup;
+import net.minecraft.client.gui.GuiException;
 import net.minecraft.client.gui.GuiHudDesigner;
+import net.minecraft.client.gui.GuiMainMenu;
+import net.minecraft.client.gui.guidebook.GuiGuidebook;
+import net.minecraft.client.gui.guidebook.PageManager;
+import net.minecraft.client.gui.guidebook.search.SearchPage;
 import net.minecraft.client.gui.modelviewer.GuiModelViewer;
 import net.minecraft.client.gui.options.components.*;
+import net.minecraft.client.gui.popup.GuiPopup;
 import net.minecraft.client.player.controller.PlayerControllerSP;
+import net.minecraft.client.render.OpenGLHelper;
 import net.minecraft.core.Global;
+import net.minecraft.core.achievement.stat.StatList;
 import net.minecraft.core.block.Block;
+import net.minecraft.core.data.registry.Registries;
+import net.minecraft.core.data.registry.recipe.SearchQuery;
 import net.minecraft.core.item.Item;
 import net.minecraft.core.item.ItemStack;
 import net.minecraft.core.util.helper.Utils;
 import net.minecraft.core.world.World;
+import org.lwjgl.opengl.GL11;
 
 import java.io.File;
 
@@ -220,11 +231,52 @@ public abstract class OptionsPages
         .withComponent(new SearchFieldComponent())
     );
     public static final OptionsPage DEBUG = new OptionsPage("gui.options.page.debug.title", Block.bedrock.getDefaultStack())
-    		.withComponent(new KeyBindingComponent(mc.gameSettings.keyToggleTextureAtlas))
+        .withComponent(new OptionsCategory("gui.options.page.debug.category.controls")
+            .withComponent(new KeyBindingComponent(mc.gameSettings.keyToggleTextureAtlas))
+            .withComponent(new KeyBindingComponent(mc.gameSettings.keyToggleDebug))
+            .withComponent(new KeyBindingComponent(mc.gameSettings.keyShowShortcuts))
+            .withComponent(new KeyBindingComponent(mc.gameSettings.keyReload))
+            .withComponent(new KeyBindingComponent(mc.gameSettings.keySwitchGamemode))
+            .withComponent(new KeyBindingComponent(mc.gameSettings.keyDumpTextures))
+            .withComponent(new KeyBindingComponent(mc.gameSettings.keyFullbright))
+            .withComponent(new KeyBindingComponent(mc.gameSettings.keyLightmaps))
+            .withComponent(new KeyBindingComponent(mc.gameSettings.keyCollisionBoxes))
+            .withComponent(new KeyBindingComponent(mc.gameSettings.keyChunkBorders))
+            .withComponent(new KeyBindingComponent(mc.gameSettings.keyClearChat))
+            .withComponent(new KeyBindingComponent(mc.gameSettings.keyPauseLostFocus))
+            .withComponent(new KeyBindingComponent(mc.gameSettings.keyToggleItemInfo))
+            .withComponent(new KeyBindingComponent(mc.gameSettings.keyReloadChunks))
+            .withComponent(new KeyBindingComponent(mc.gameSettings.keySmoothLighting))
+            .withComponent(new KeyBindingComponent(mc.gameSettings.keyReleaseCursor))
+        )
+        .withComponent(new OptionsCategory("gui.options.page.debug.category.settings")
+            .withComponent(new BooleanOptionComponent(mc.gameSettings.alphaMenu))
+            .withComponent(new BooleanOptionComponent(mc.gameSettings.lockCamera))
+            .withComponent(new BooleanOptionComponent(mc.gameSettings.showDebugScreen))
+            .withComponent(new BooleanOptionComponent(mc.gameSettings.showFrameTimes))
+            .withComponent(new BooleanOptionComponent(mc.gameSettings.showChunkBorders))
+            .withComponent(new BooleanOptionComponent(mc.gameSettings.showCollisionBoxes))
+            .withComponent(new BooleanOptionComponent(mc.gameSettings.showItemDebugInfo))
+            .withComponent(new BooleanOptionComponent(mc.gameSettings.disableJInput))
+            .withComponent(new BooleanOptionComponent(mc.gameSettings.disableCrashHandler))
+            .withComponent(new BooleanOptionComponent(mc.gameSettings.disableResize))
+            .withComponent(new BooleanOptionComponent(mc.gameSettings.startInFullscreen))
+            .withComponent(new BooleanOptionComponent(mc.gameSettings.disableShaders))
+            .withComponent(new BooleanOptionComponent(mc.gameSettings.loadAllSounds))
+            .withComponent(new BooleanOptionComponent(mc.gameSettings.allowSoundOverrides))
+            .withComponent(new BooleanOptionComponent(mc.gameSettings.downloadSoundfiles))
+        )
+        .withComponent(new OptionsCategory("gui.options.page.debug.category.utility")
             .withComponent(new ShortcutComponent("gui.options.page.debug.button.open.model_viewer", () -> {
-                mc.playerController = new PlayerControllerSP(mc);
-                mc.changeWorld(new World(), "Loading Model Viewer");
-                mc.displayGuiScreen(new GuiModelViewer());})
+                               mc.playerController = new PlayerControllerSP(mc);
+                               mc.changeWorld(new World(), "Loading Model Viewer");
+                               mc.displayGuiScreen(new GuiModelViewer());}) {
+                               @Override
+                               public void render(int x, int y, int width, int relativeMouseX, int relativeMouseY) {
+                                   button.enabled = mc.theWorld == null;
+                                   super.render(x, y, width, relativeMouseX, relativeMouseY);
+                               }
+                           }
             )
             .withComponent(new ShortcutComponent("gui.options.page.debug.button.open.biome_finder", () -> {
                 BiomeFinder.main(new String[0]);
@@ -235,6 +287,17 @@ public abstract class OptionsPages
                 Utils.openDirectory(new File(mc.getMinecraftDir(), "infodump"));
                 Global.accessor = mc;
             }))
+        )
+        .withComponent(new OptionsCategory("gui.options.page.debug.category.test")
+            .withComponent(new ShortcutComponent("gui.options.page.debug.button.crash.soft", () -> {
+                throw new RuntimeException("Test Soft Exception");
+            }))
+            .withComponent(new ShortcutComponent("gui.options.page.debug.button.crash.hard", () -> {
+                mc.changeWorld(null);
+                GuiPopup error = GuiException.createFatal(new RuntimeException("Test Hard Exception"), mc);
+                mc.displayGuiScreen(error);
+            }))
+        )
             ;
 
     public static OptionsPage register(OptionsPage page)
diff --git a/src/main/java/net/minecraft/client/option/GameSettings.java b/src/main/java/net/minecraft/client/option/GameSettings.java
index a2cdfad31..7762378c3 100644
--- a/src/main/java/net/minecraft/client/option/GameSettings.java
+++ b/src/main/java/net/minecraft/client/option/GameSettings.java
@@ -7,6 +7,8 @@ import java.io.File;
 import java.io.FileReader;
 import java.io.FileWriter;
 import java.io.PrintWriter;
+import java.util.ArrayList;
+import java.util.List;
 
 import org.lwjgl.opengl.Display;
 
@@ -214,8 +216,23 @@ public class GameSettings {
 	public KeyBinding keyHideGui = new KeyBinding("key.immersiveMode").setDefault(InputDevice.keyboard, KEY_F1);
 	public KeyBinding keyAutoWalk = new KeyBinding("key.autoWalk");
 	public KeyBinding keySprint = new KeyBinding("key.sprint");
-	public KeyBinding keyToggleDebug = new KeyBinding("key.toggleDebug").setDefault(InputDevice.keyboard, KEY_F3);
 	public KeyBinding keyToggleOverlay = new KeyBinding("key.toggleOverlay").setDefault(InputDevice.keyboard, KEY_F4);
+	public List<KeyBinding> debugsKeys = new ArrayList<>();
+	public KeyBinding keyToggleDebug = new KeyBinding("key.toggleDebug").setDefault(InputDevice.keyboard, KEY_F3);
+	public KeyBinding keyReload = new KeyBinding("key.debug.reload").setDefault(InputDevice.keyboard, KEY_R);
+	public KeyBinding keySwitchGamemode = new KeyBinding("key.debug.gamemode").setDefault(InputDevice.keyboard, KEY_N);
+	public KeyBinding keyDumpTextures = new KeyBinding("key.debug.dumptextures").setDefault(InputDevice.keyboard, KEY_D);
+	public KeyBinding keyFullbright = new KeyBinding("key.debug.fullbright").setDefault(InputDevice.keyboard, KEY_F);
+	public KeyBinding keyLightmaps = new KeyBinding("key.debug.lightmap").setDefault(InputDevice.keyboard, KEY_L);
+	public KeyBinding keyCollisionBoxes = new KeyBinding("key.debug.collision").setDefault(InputDevice.keyboard, KEY_B);
+	public KeyBinding keyChunkBorders = new KeyBinding("key.debug.chunkborders").setDefault(InputDevice.keyboard, KEY_G);
+	public KeyBinding keyClearChat = new KeyBinding("key.debug.clearchat").setDefault(InputDevice.keyboard, KEY_C);
+	public KeyBinding keyPauseLostFocus = new KeyBinding("key.debug.pauseFocus").setDefault(InputDevice.keyboard, KEY_P);
+	public KeyBinding keyToggleItemInfo = new KeyBinding("key.debug.iteminfo").setDefault(InputDevice.keyboard, KEY_H);
+	public KeyBinding keyReloadChunks = new KeyBinding("key.debug.reloadchunks").setDefault(InputDevice.keyboard, KEY_A);
+	public KeyBinding keySmoothLighting = new KeyBinding("key.debug.smoothlighting").setDefault(InputDevice.keyboard, KEY_S);
+	public KeyBinding keyReleaseCursor = new KeyBinding("key.debug.releasecursor").setDefault(InputDevice.keyboard, KEY_F12);
+	public KeyBinding keyShowShortcuts = new KeyBinding("key.debug.shortcuts").setDefault(InputDevice.keyboard, KEY_Q);
 	public KeyBinding keyToggleTextureAtlas = new KeyBinding("key.debug.textureAtlas");
 
 	public KeyBinding[] keys = ReflectUtils.getAllObjects(GameSettings.class, KeyBinding.class, this);
@@ -237,6 +254,20 @@ public class GameSettings {
 		optionsFile = new File(file, "options.txt");
 		loadOptions();
 		saveOptions();
+
+		debugsKeys.add(keyShowShortcuts);
+		debugsKeys.add(keyReload);
+		debugsKeys.add(keySwitchGamemode);
+		debugsKeys.add(keyDumpTextures);
+		debugsKeys.add(keyFullbright);
+		debugsKeys.add(keyLightmaps);
+		debugsKeys.add(keyCollisionBoxes);
+		debugsKeys.add(keyChunkBorders);
+		debugsKeys.add(keyClearChat);
+		debugsKeys.add(keyPauseLostFocus);
+		debugsKeys.add(keyToggleItemInfo);
+		debugsKeys.add(keyReloadChunks);
+		debugsKeys.add(keySmoothLighting);
 	}
 	
 	public String getDisplayString(Option<?> option) {
diff --git a/src/main/java/net/minecraft/client/option/KeyBinding.java b/src/main/java/net/minecraft/client/option/KeyBinding.java
index 32892d266..1f91132fb 100644
--- a/src/main/java/net/minecraft/client/option/KeyBinding.java
+++ b/src/main/java/net/minecraft/client/option/KeyBinding.java
@@ -111,6 +111,12 @@ public class KeyBinding {
 		}
 		return false;
 	}
+	public boolean isPressEvent() {
+		if(inputDevice != null) {
+			return inputDevice.isPressEvent(keyCode);
+		}
+		return false;
+	}
 
 	public boolean isReleaseEvent(InputDevice eventInputDevice) {
 		if(inputDevice == eventInputDevice) {
@@ -118,6 +124,12 @@ public class KeyBinding {
 		}
 		return false;
 	}
+	public boolean isReleaseEvent() {
+		if(inputDevice != null) {
+			return inputDevice.isReleaseEvent(keyCode);
+		}
+		return false;
+	}
 
 	public void fromOptionsString(String value) {
 		if(value.length() == 0) {
diff --git a/src/main/java/net/minecraft/client/render/WorldRenderer.java b/src/main/java/net/minecraft/client/render/WorldRenderer.java
index 018b2f24f..224dccb2c 100644
--- a/src/main/java/net/minecraft/client/render/WorldRenderer.java
+++ b/src/main/java/net/minecraft/client/render/WorldRenderer.java
@@ -861,7 +861,7 @@ public class WorldRenderer
         glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
         glAlphaFunc(516, 0.01F);
         
-        glBindTexture(3553 /*GL_TEXTURE_2D*/, mc.renderEngine.getTexture(weather.texturePath));
+        glBindTexture(3553 /*GL_TEXTURE_2D*/, mc.renderEngine.getTexture(weather.getPrecipitationTexture(world)));
         
         double nextPosX = mc.activeCamera.getX(partialTick);
         double nextPosY = mc.activeCamera.getY(partialTick);
diff --git a/src/main/java/net/minecraft/core/world/weather/Weather.java b/src/main/java/net/minecraft/core/world/weather/Weather.java
index 09fe96f87..39fce5dd2 100644
--- a/src/main/java/net/minecraft/core/world/weather/Weather.java
+++ b/src/main/java/net/minecraft/core/world/weather/Weather.java
@@ -12,7 +12,7 @@ public abstract class Weather
 	public int weatherId;
 	public String languageKey;
 	public boolean isPrecipitation = false;
-	public String texturePath = null;
+	private String texturePath = null;
 	public int subtractLightLevel = 0;
 	public int precipitationType = 0;
 	public boolean spawnRainParticles = false;
@@ -45,6 +45,11 @@ public abstract class Weather
 		this.texturePath = texturePath;
 		return this;
 	}
+
+	public String getPrecipitationTexture(World world)
+	{
+		return texturePath;
+	}
 	
 	public Weather setSubtractLightLevel(int subtractLightLevel)
 	{
diff --git a/src/main/java/net/minecraft/core/world/weather/WeatherSnow.java b/src/main/java/net/minecraft/core/world/weather/WeatherSnow.java
index da26c916c..adc52ac52 100644
--- a/src/main/java/net/minecraft/core/world/weather/WeatherSnow.java
+++ b/src/main/java/net/minecraft/core/world/weather/WeatherSnow.java
@@ -20,6 +20,19 @@ public class WeatherSnow extends Weather
 		super(id);
 	}
 
+	@Override
+	public String getPrecipitationTexture(World world)
+	{
+		if (world.weatherManager.getWeatherPower() <= 0.6f)
+		{
+			return "/environment/snow_light.png";
+		}
+		else
+		{
+			return "/environment/snow.png";
+		}
+	}
+
 	@Override
 	public void doChunkLoadEffect(World world, Chunk chunk)
 	{
diff --git a/src/main/resources/environment/snow_light.png b/src/main/resources/environment/snow_light.png
new file mode 100644
index 000000000..2b79b381a
Binary files /dev/null and b/src/main/resources/environment/snow_light.png differ
