diff --git a/Source/Core/Core/ConfigManager.cpp b/Source/Core/Core/ConfigManager.cpp
index 600151db4d..feddb8dda1 100644
--- a/Source/Core/Core/ConfigManager.cpp
+++ b/Source/Core/Core/ConfigManager.cpp
@@ -13,139 +13,6 @@
 
 SConfig* SConfig::m_Instance;
 
-static const struct
-{
-	const char* IniText;
-	const int   DefaultKey;
-	const int   DefaultModifier;
-} g_HKData[] = {
-	{ "Open",                  79  /* 'O' */,        2 /* wxMOD_CONTROL */ },
-	{ "ChangeDisc",            0,                    0 /* wxMOD_NONE */    },
-	{ "RefreshList",           0,                    0 /* wxMOD_NONE */    },
-#ifdef __APPLE__
-	{ "PlayPause",             80  /* 'P' */,        2 /* wxMOD_CMD */     },
-	{ "Stop",                  87  /* 'W' */,        2 /* wxMOD_CMD */     },
-	{ "Reset",                 0,                    0 /* wxMOD_NONE */    },
-	{ "FrameAdvance",          0,                    0 /* wxMOD_NONE */    },
-
-	{ "StartRecording",        0,                    0 /* wxMOD_NONE */    },
-	{ "PlayRecording",         0,                    0 /* wxMOD_NONE */    },
-	{ "ExportRecording",       0,                    0 /* wxMOD_NONE */    },
-	{ "Readonlymode",          0,                    0 /* wxMOD_NONE */    },
-
-	{ "ToggleFullscreen",      70  /* 'F' */,        2 /* wxMOD_CMD */     },
-	{ "Screenshot",            83  /* 'S' */,        2 /* wxMOD_CMD */     },
-	{ "Exit",                  0,                    0 /* wxMOD_NONE */    },
-
-	{ "Wiimote1Connect",       49  /* '1' */,        2 /* wxMOD_CMD */     },
-	{ "Wiimote2Connect",       50  /* '2' */,        2 /* wxMOD_CMD */     },
-	{ "Wiimote3Connect",       51  /* '3' */,        2 /* wxMOD_CMD */     },
-	{ "Wiimote4Connect",       52  /* '4' */,        2 /* wxMOD_CMD */     },
-	{ "BalanceBoardConnect",   53  /* '4' */,        2 /* wxMOD_CMD */     },
-#else
-	{ "PlayPause",             349 /* WXK_F10 */,    0 /* wxMOD_NONE */    },
-	{ "Stop",                  27  /* WXK_ESCAPE */, 0 /* wxMOD_NONE */    },
-	{ "Reset",                 0,                    0 /* wxMOD_NONE */    },
-	{ "FrameAdvance",          0,                    0 /* wxMOD_NONE */    },
-
-	{ "StartRecording",        0,                    0 /* wxMOD_NONE */    },
-	{ "PlayRecording",         0,                    0 /* wxMOD_NONE */    },
-	{ "ExportRecording",       0,                    0 /* wxMOD_NONE */    },
-	{ "Readonlymode",          0,                    0 /* wxMOD_NONE */    },
-
-	{ "ToggleFullscreen",      13  /* WXK_RETURN */, 1 /* wxMOD_ALT */     },
-	{ "Screenshot",            348 /* WXK_F9 */,     0 /* wxMOD_NONE */    },
-	{ "Exit",                  0,                    0 /* wxMOD_NONE */    },
-
-	{ "Wiimote1Connect",       344 /* WXK_F5 */,     1 /* wxMOD_ALT */     },
-	{ "Wiimote2Connect",       345 /* WXK_F6 */,     1 /* wxMOD_ALT */     },
-	{ "Wiimote3Connect",       346 /* WXK_F7 */,     1 /* wxMOD_ALT */     },
-	{ "Wiimote4Connect",       347 /* WXK_F8 */,     1 /* wxMOD_ALT */     },
-	{ "BalanceBoardConnect",   348 /* WXK_F9 */,     1 /* wxMOD_ALT */     },
-#endif
-
-	{ "VolumeDown",            0,                    0 /* wxMOD_NONE */    },
-	{ "VolumeUp",              0,                    0 /* wxMOD_NONE */    },
-	{ "VolumeToggleMute",      0,                    0 /* wxMOD_NONE */    },
-
-	{ "IncreaseIR",            0,                    0 /* wxMOD_NONE */    },
-	{ "DecreaseIR",            0,                    0 /* wxMOD_NONE */    },
-
-	{ "ToggleIR",              0,                    0 /* wxMOD_NONE */    },
-	{ "ToggleAspectRatio",     0,                    0 /* wxMOD_NONE */    },
-	{ "ToggleEFBCopies",       0,                    0 /* wxMOD_NONE */    },
-	{ "ToggleFog",             0,                    0 /* wxMOD_NONE */    },
-	{ "ToggleThrottle",        9   /* '\t' */,       0 /* wxMOD_NONE */    },
-	{ "DecreaseFrameLimit",    0,                    0 /* wxMOD_NONE */    },
-	{ "IncreaseFrameLimit",    0,                    0 /* wxMOD_NONE */    },
-
-	{ "FreelookDecreaseSpeed", 49  /* '1' */,        4 /* wxMOD_SHIFT */   },
-	{ "FreelookIncreaseSpeed", 50  /* '2' */,        4 /* wxMOD_SHIFT */   },
-	{ "FreelookResetSpeed",    70  /* 'F' */,        4 /* wxMOD_SHIFT */   },
-	{ "FreelookUp",            69  /* 'E' */,        4 /* wxMOD_SHIFT */   },
-	{ "FreelookDown",          81  /* 'Q' */,        4 /* wxMOD_SHIFT */   },
-	{ "FreelookLeft",          65  /* 'A' */,        4 /* wxMOD_SHIFT */   },
-	{ "FreelookRight",         68  /* 'D' */,        4 /* wxMOD_SHIFT */   },
-	{ "FreelookZoomIn",        87  /* 'W' */,        4 /* wxMOD_SHIFT */   },
-	{ "FreelookZoomOut",       83  /* 'S' */,        4 /* wxMOD_SHIFT */   },
-	{ "FreelookReset",         82  /* 'R' */,        4 /* wxMOD_SHIFT */   },
-
-	{ "DecreaseDepth",         0,                    0 /* wxMOD_NONE */    },
-	{ "IncreaseDepth",         0,                    0 /* wxMOD_NONE */    },
-	{ "DecreaseConvergence",   0,                    0 /* wxMOD_NONE */    },
-	{ "IncreaseConvergence",   0,                    0 /* wxMOD_NONE */    },
-
-	{ "LoadStateSlot1",        340 /* WXK_F1 */,     0 /* wxMOD_NONE */    },
-	{ "LoadStateSlot2",        341 /* WXK_F2 */,     0 /* wxMOD_NONE */    },
-	{ "LoadStateSlot3",        342 /* WXK_F3 */,     0 /* wxMOD_NONE */    },
-	{ "LoadStateSlot4",        343 /* WXK_F4 */,     0 /* wxMOD_NONE */    },
-	{ "LoadStateSlot5",        344 /* WXK_F5 */,     0 /* wxMOD_NONE */    },
-	{ "LoadStateSlot6",        345 /* WXK_F6 */,     0 /* wxMOD_NONE */    },
-	{ "LoadStateSlot7",        346 /* WXK_F7 */,     0 /* wxMOD_NONE */    },
-	{ "LoadStateSlot8",        347 /* WXK_F8 */,     0 /* wxMOD_NONE */    },
-	{ "LoadStateSlot9",        0,                    0 /* wxMOD_NONE */    },
-	{ "LoadStateSlot10",       0,                    0 /* wxMOD_NONE */    },
-
-	{ "SaveStateSlot1",        340 /* WXK_F1 */,     4 /* wxMOD_SHIFT */   },
-	{ "SaveStateSlot2",        341 /* WXK_F2 */,     4 /* wxMOD_SHIFT */   },
-	{ "SaveStateSlot3",        342 /* WXK_F3 */,     4 /* wxMOD_SHIFT */   },
-	{ "SaveStateSlot4",        343 /* WXK_F4 */,     4 /* wxMOD_SHIFT */   },
-	{ "SaveStateSlot5",        344 /* WXK_F5 */,     4 /* wxMOD_SHIFT */   },
-	{ "SaveStateSlot6",        345 /* WXK_F6 */,     4 /* wxMOD_SHIFT */   },
-	{ "SaveStateSlot7",        346 /* WXK_F7 */,     4 /* wxMOD_SHIFT */   },
-	{ "SaveStateSlot8",        347 /* WXK_F8 */,     4 /* wxMOD_SHIFT */   },
-	{ "SaveStateSlot9",        0,                    0 /* wxMOD_NONE */    },
-	{ "SaveStateSlot10",       0,                    0 /* wxMOD_NONE */    },
-
-	{ "SelectStateSlot1",      0,                    0 /* wxMOD_NONE */    },
-	{ "SelectStateSlot2",      0,                    0 /* wxMOD_NONE */    },
-	{ "SelectStateSlot3",      0,                    0 /* wxMOD_NONE */    },
-	{ "SelectStateSlot4",      0,                    0 /* wxMOD_NONE */    },
-	{ "SelectStateSlot5",      0,                    0 /* wxMOD_NONE */    },
-	{ "SelectStateSlot6",      0,                    0 /* wxMOD_NONE */    },
-	{ "SelectStateSlot7",      0,                    0 /* wxMOD_NONE */    },
-	{ "SelectStateSlot8",      0,                    0 /* wxMOD_NONE */    },
-	{ "SelectStateSlot9",      0,                    0 /* wxMOD_NONE */    },
-	{ "SelectStateSlot10",     0,                    0 /* wxMOD_NONE */    },
-	{ "SaveSelectedSlot",      0,                    0 /* wxMOD_NONE */    },
-	{ "LoadSelectedSlot",      0,                    0 /* wxMOD_NONE */    },
-
-	{ "LoadLastState1",        0,                    0 /* wxMOD_NONE */    },
-	{ "LoadLastState2",        0,                    0 /* wxMOD_NONE */    },
-	{ "LoadLastState3",        0,                    0 /* wxMOD_NONE */    },
-	{ "LoadLastState4",        0,                    0 /* wxMOD_NONE */    },
-	{ "LoadLastState5",        0,                    0 /* wxMOD_NONE */    },
-	{ "LoadLastState6",        0,                    0 /* wxMOD_NONE */    },
-	{ "LoadLastState7",        0,                    0 /* wxMOD_NONE */    },
-	{ "LoadLastState8",        0,                    0 /* wxMOD_NONE */    },
-
-	{ "SaveFirstState",        0,                    0 /* wxMOD_NONE */    },
-	{ "UndoLoadState",         351 /* WXK_F12 */,    0 /* wxMOD_NONE */    },
-	{ "UndoSaveState",         351 /* WXK_F12 */,    4 /* wxMOD_SHIFT */   },
-	{ "SaveStateFile",         0,                    0 /* wxMOD_NONE */    },
-	{ "LoadStateFile",         0,                    0 /* wxMOD_NONE */    },
-};
-
 SConfig::SConfig()
 {
 	// Make sure we have log manager
@@ -178,7 +45,6 @@ void SConfig::SaveSettings()
 
 	SaveGeneralSettings(ini);
 	SaveInterfaceSettings(ini);
-	SaveHotkeySettings(ini);
 	SaveDisplaySettings(ini);
 	SaveGameListSettings(ini);
 	SaveCoreSettings(ini);
@@ -251,18 +117,6 @@ void SConfig::SaveInterfaceSettings(IniFile& ini)
 	interface->Set("PauseOnFocusLost", m_PauseOnFocusLost);
 }
 
-void SConfig::SaveHotkeySettings(IniFile& ini)
-{
-	IniFile::Section* hotkeys = ini.GetOrCreateSection("Hotkeys");
-
-	for (int i = 0; i < NUM_HOTKEYS; i++)
-	{
-		hotkeys->Set(g_HKData[i].IniText, m_LocalCoreStartupParameter.iHotkey[i]);
-		hotkeys->Set(std::string(g_HKData[i].IniText) + "Modifier",
-			m_LocalCoreStartupParameter.iHotkeyModifier[i]);
-	}
-}
-
 void SConfig::SaveDisplaySettings(IniFile& ini)
 {
 	IniFile::Section* display = ini.GetOrCreateSection("Display");
@@ -407,7 +261,6 @@ void SConfig::LoadSettings()
 
 	LoadGeneralSettings(ini);
 	LoadInterfaceSettings(ini);
-	LoadHotkeySettings(ini);
 	LoadDisplaySettings(ini);
 	LoadGameListSettings(ini);
 	LoadCoreSettings(ini);
@@ -501,19 +354,6 @@ void SConfig::LoadInterfaceSettings(IniFile& ini)
 	interface->Get("PauseOnFocusLost",        &m_PauseOnFocusLost,                            false);
 }
 
-void SConfig::LoadHotkeySettings(IniFile& ini)
-{
-	IniFile::Section* hotkeys = ini.GetOrCreateSection("Hotkeys");
-
-	for (int i = 0; i < NUM_HOTKEYS; i++)
-	{
-		hotkeys->Get(g_HKData[i].IniText,
-		    &m_LocalCoreStartupParameter.iHotkey[i], 0);
-		hotkeys->Get(std::string(g_HKData[i].IniText) + "Modifier",
-		    &m_LocalCoreStartupParameter.iHotkeyModifier[i], 0);
-	}
-}
-
 void SConfig::LoadDisplaySettings(IniFile& ini)
 {
 	IniFile::Section* display = ini.GetOrCreateSection("Display");
diff --git a/Source/Core/Core/ConfigManager.h b/Source/Core/Core/ConfigManager.h
index 42cd8d5d2b..6034fa9c1a 100644
--- a/Source/Core/Core/ConfigManager.h
+++ b/Source/Core/Core/ConfigManager.h
@@ -139,7 +139,6 @@ private:
 	void SaveGeneralSettings(IniFile& ini);
 	void SaveInterfaceSettings(IniFile& ini);
 	void SaveDisplaySettings(IniFile& ini);
-	void SaveHotkeySettings(IniFile& ini);
 	void SaveGameListSettings(IniFile& ini);
 	void SaveCoreSettings(IniFile& ini);
 	void SaveDSPSettings(IniFile& ini);
@@ -150,7 +149,6 @@ private:
 	void LoadGeneralSettings(IniFile& ini);
 	void LoadInterfaceSettings(IniFile& ini);
 	void LoadDisplaySettings(IniFile& ini);
-	void LoadHotkeySettings(IniFile& ini);
 	void LoadGameListSettings(IniFile& ini);
 	void LoadCoreSettings(IniFile& ini);
 	void LoadDSPSettings(IniFile& ini);
diff --git a/Source/Core/Core/CoreParameter.h b/Source/Core/Core/CoreParameter.h
index b459c1b3be..43d758bbad 100644
--- a/Source/Core/Core/CoreParameter.h
+++ b/Source/Core/Core/CoreParameter.h
@@ -111,6 +111,8 @@ enum Hotkey
 	HK_LOAD_LAST_STATE_6,
 	HK_LOAD_LAST_STATE_7,
 	HK_LOAD_LAST_STATE_8,
+	HK_LOAD_LAST_STATE_9,
+	HK_LOAD_LAST_STATE_10,
 
 	HK_SAVE_FIRST_STATE,
 	HK_UNDO_LOAD_STATE,
@@ -193,10 +195,6 @@ struct SCoreStartupParameter
 	bool bConfirmStop, bHideCursor, bAutoHideCursor, bUsePanicHandlers, bOnScreenDisplayMessages;
 	std::string theme_name;
 
-	// Hotkeys
-	int iHotkey[NUM_HOTKEYS];
-	int iHotkeyModifier[NUM_HOTKEYS];
-
 	// Display settings
 	std::string strFullscreenResolution;
 	int iRenderWindowXPos, iRenderWindowYPos;
diff --git a/Source/Core/DolphinWX/CMakeLists.txt b/Source/Core/DolphinWX/CMakeLists.txt
index 275a68f426..c7f8e371de 100644
--- a/Source/Core/DolphinWX/CMakeLists.txt
+++ b/Source/Core/DolphinWX/CMakeLists.txt
@@ -41,7 +41,6 @@ set(GUI_SRCS
 	FrameAui.cpp
 	FrameTools.cpp
 	GameListCtrl.cpp
-	HotkeyDlg.cpp
 	ISOFile.cpp
 	ISOProperties.cpp
 	InputConfigDiag.cpp
diff --git a/Source/Core/DolphinWX/DolphinWX.vcxproj b/Source/Core/DolphinWX/DolphinWX.vcxproj
index f6ecb0ae14..3ecb72fa13 100644
--- a/Source/Core/DolphinWX/DolphinWX.vcxproj
+++ b/Source/Core/DolphinWX/DolphinWX.vcxproj
@@ -88,7 +88,6 @@
     <ClCompile Include="FrameAui.cpp" />
     <ClCompile Include="FrameTools.cpp" />
     <ClCompile Include="GameListCtrl.cpp" />
-    <ClCompile Include="HotkeyDlg.cpp" />
     <ClCompile Include="InputConfigDiag.cpp" />
     <ClCompile Include="InputConfigDiagBitmaps.cpp" />
     <ClCompile Include="ISOFile.cpp" />
@@ -151,7 +150,6 @@
     <ClInclude Include="Frame.h" />
     <ClInclude Include="GameListCtrl.h" />
     <ClInclude Include="Globals.h" />
-    <ClInclude Include="HotkeyDlg.h" />
     <ClInclude Include="InputConfigDiag.h" />
     <ClInclude Include="ISOFile.h" />
     <ClInclude Include="ISOProperties.h" />
diff --git a/Source/Core/DolphinWX/DolphinWX.vcxproj.filters b/Source/Core/DolphinWX/DolphinWX.vcxproj.filters
index 54604a1a33..87fb5df32a 100644
--- a/Source/Core/DolphinWX/DolphinWX.vcxproj.filters
+++ b/Source/Core/DolphinWX/DolphinWX.vcxproj.filters
@@ -139,9 +139,6 @@
     <ClCompile Include="GameListCtrl.cpp">
       <Filter>GUI</Filter>
     </ClCompile>
-    <ClCompile Include="HotkeyDlg.cpp">
-      <Filter>GUI</Filter>
-    </ClCompile>
     <ClCompile Include="ISOProperties.cpp">
       <Filter>GUI</Filter>
     </ClCompile>
@@ -303,9 +300,6 @@
     <ClInclude Include="Globals.h">
       <Filter>GUI</Filter>
     </ClInclude>
-    <ClInclude Include="HotkeyDlg.h">
-      <Filter>GUI</Filter>
-    </ClInclude>
     <ClInclude Include="ISOProperties.h">
       <Filter>GUI</Filter>
     </ClInclude>
diff --git a/Source/Core/DolphinWX/Frame.cpp b/Source/Core/DolphinWX/Frame.cpp
index 5a7394a25e..46aa317d12 100644
--- a/Source/Core/DolphinWX/Frame.cpp
+++ b/Source/Core/DolphinWX/Frame.cpp
@@ -262,7 +262,6 @@ EVT_MENU(IDM_CONFIG_GFX_BACKEND, CFrame::OnConfigGFX)
 EVT_MENU(IDM_CONFIG_AUDIO, CFrame::OnConfigAudio)
 EVT_MENU(IDM_CONFIG_CONTROLLERS, CFrame::OnConfigControllers)
 EVT_MENU(IDM_CONFIG_HOTKEYS, CFrame::OnConfigHotkey)
-EVT_MENU(IDM_CONFIG_MENU_COMMANDS, CFrame::OnConfigMenuCommands)
 
 EVT_MENU(IDM_SAVE_PERSPECTIVE, CFrame::OnPerspectiveMenu)
 EVT_MENU(IDM_EDIT_PERSPECTIVES, CFrame::OnPerspectiveMenu)
@@ -934,17 +933,9 @@ void CFrame::OnGameListCtrlItemActivated(wxListEvent& WXUNUSED(event))
 	}
 }
 
-static bool IsHotkey(wxKeyEvent &event, int id, bool held = false)
+static bool IsHotkey(int id, bool held = false)
 {
-	// Input event hotkey
-	if (event.GetKeyCode() == WXK_NONE)
-	{
-		return HotkeyManagerEmu::IsPressed(id, held);
-	}
-
-	return (event.GetKeyCode() != WXK_NONE &&
-		event.GetKeyCode() == SConfig::GetInstance().m_LocalCoreStartupParameter.iHotkey[id] &&
-		event.GetModifiers() == SConfig::GetInstance().m_LocalCoreStartupParameter.iHotkeyModifier[id]);
+	return HotkeyManagerEmu::IsPressed(id, held);
 }
 
 int GetCmdForHotkey(unsigned int key)
@@ -1081,41 +1072,6 @@ bool TASInputHasFocus()
 	return false;
 }
 
-void CFrame::OnKeyDown(wxKeyEvent& event)
-{
-	if (Core::GetState() != Core::CORE_UNINITIALIZED &&
-	    (RendererHasFocus() || TASInputHasFocus()))
-	{
-		if (IsHotkey(event, HK_TOGGLE_THROTTLE))
-		{
-			Core::SetIsFramelimiterTempDisabled(true);
-		}
-		else
-		{
-			ParseHotkeys(event);
-		}
-	}
-	else
-	{
-		event.Skip();
-	}
-}
-
-void CFrame::OnKeyUp(wxKeyEvent& event)
-{
-	if (Core::IsRunning() && (RendererHasFocus() || TASInputHasFocus()))
-	{
-		if (IsHotkey(event, HK_TOGGLE_THROTTLE))
-		{
-			Core::SetIsFramelimiterTempDisabled(false);
-		}
-	}
-	else
-	{
-		event.Skip();
-	}
-}
-
 void CFrame::OnMouse(wxMouseEvent& event)
 {
 	// next handlers are all for FreeLook, so we don't need to check them if disabled
@@ -1304,15 +1260,13 @@ void CFrame::PollHotkeys(wxTimerEvent& event)
 	if (Core::GetState() != Core::CORE_STOPPING)
 	{
 		HotkeyManagerEmu::GetStatus();
-		wxKeyEvent keyevent = 0;
-		ParseHotkeys(keyevent);
+		ParseHotkeys();
 	}
 }
 
-void CFrame::ParseHotkeys(wxKeyEvent &event)
+void CFrame::ParseHotkeys()
 {
-	unsigned int i = 0;
-	for (i = 0; i < NUM_HOTKEYS; i++)
+	for (int i = 0; i < NUM_HOTKEYS; i++)
 	{
 		switch  (i)
 		{
@@ -1326,46 +1280,11 @@ void CFrame::ParseHotkeys(wxKeyEvent &event)
 			case HK_EXPORT_RECORDING:
 			case HK_READ_ONLY_MODE:
 
-			case HK_LOAD_STATE_SLOT_1:
-			case HK_LOAD_STATE_SLOT_2:
-			case HK_LOAD_STATE_SLOT_3:
-			case HK_LOAD_STATE_SLOT_4:
-			case HK_LOAD_STATE_SLOT_5:
-			case HK_LOAD_STATE_SLOT_6:
-			case HK_LOAD_STATE_SLOT_7:
-			case HK_LOAD_STATE_SLOT_8:
-			case HK_LOAD_STATE_SLOT_9:
-			case HK_LOAD_STATE_SLOT_10:
-
-			case HK_SAVE_STATE_SLOT_1:
-			case HK_SAVE_STATE_SLOT_2:
-			case HK_SAVE_STATE_SLOT_3:
-			case HK_SAVE_STATE_SLOT_4:
-			case HK_SAVE_STATE_SLOT_5:
-			case HK_SAVE_STATE_SLOT_6:
-			case HK_SAVE_STATE_SLOT_7:
-			case HK_SAVE_STATE_SLOT_8:
-			case HK_SAVE_STATE_SLOT_9:
-			case HK_SAVE_STATE_SLOT_10:
-
-			case HK_LOAD_LAST_STATE_1:
-			case HK_LOAD_LAST_STATE_2:
-			case HK_LOAD_LAST_STATE_3:
-			case HK_LOAD_LAST_STATE_4:
-			case HK_LOAD_LAST_STATE_5:
-			case HK_LOAD_LAST_STATE_6:
-			case HK_LOAD_LAST_STATE_7:
-			case HK_LOAD_LAST_STATE_8:
-
-			case HK_SAVE_FIRST_STATE:
-			case HK_UNDO_LOAD_STATE:
-			case HK_UNDO_SAVE_STATE:
 			case HK_LOAD_STATE_FILE:
 			case HK_SAVE_STATE_FILE:
-
 			case HK_LOAD_STATE_SLOT_SELECTED:
 
-				if (IsHotkey(event, i))
+				if (IsHotkey(i))
 				{
 					int cmd = GetCmdForHotkey(i);
 					if (cmd >= 0)
@@ -1385,56 +1304,44 @@ void CFrame::ParseHotkeys(wxKeyEvent &event)
 				// do nothing
 		}
 	}
-	// On OS X, we claim all keyboard events while
-	// emulation is running to avoid wxWidgets sounding
-	// the system beep for unhandled key events when
-	// receiving pad/Wiimote keypresses which take an
-	// entirely different path through the HID subsystem.
-#ifndef __APPLE__
-	// On other platforms, we leave the key event alone
-	// so it can be passed on to the windowing system.
-	if (i == NUM_HOTKEYS)
-		event.Skip();
-#endif
 
-	if (Core::GetState() == Core::CORE_UNINITIALIZED)
+	if (!Core::IsRunningAndStarted())
 	{
-		event.Skip();
 		return;
 	}
 
 	// Toggle fullscreen
-	if (IsHotkey(event, HK_FULLSCREEN))
+	if (IsHotkey(HK_FULLSCREEN))
 		DoFullscreen(!RendererIsFullscreen());
 	// Pause and Unpause
-	if (IsHotkey(event, HK_PLAY_PAUSE))
+	if (IsHotkey(HK_PLAY_PAUSE))
 		DoPause();
 	// Stop
-	if (IsHotkey(event, HK_STOP))
+	if (IsHotkey(HK_STOP))
 		DoStop();
 	// Screenshot hotkey
-	if (IsHotkey(event, HK_SCREENSHOT))
+	if (IsHotkey(HK_SCREENSHOT))
 		Core::SaveScreenShot();
-	if (IsHotkey(event, HK_EXIT))
+	if (IsHotkey(HK_EXIT))
 		wxPostEvent(this, wxCommandEvent(wxID_EXIT));
-	if (IsHotkey(event, HK_VOLUME_DOWN))
+	if (IsHotkey(HK_VOLUME_DOWN))
 		AudioCommon::DecreaseVolume(3);
-	if (IsHotkey(event, HK_VOLUME_UP))
+	if (IsHotkey(HK_VOLUME_UP))
 		AudioCommon::IncreaseVolume(3);
-	if (IsHotkey(event, HK_VOLUME_TOGGLE_MUTE))
+	if (IsHotkey(HK_VOLUME_TOGGLE_MUTE))
 		AudioCommon::ToggleMuteVolume();
 
 	// Wiimote connect and disconnect hotkeys
 	int WiimoteId = -1;
-	if (IsHotkey(event, HK_WIIMOTE1_CONNECT))
+	if (IsHotkey(HK_WIIMOTE1_CONNECT))
 		WiimoteId = 0;
-	if (IsHotkey(event, HK_WIIMOTE2_CONNECT))
+	if (IsHotkey(HK_WIIMOTE2_CONNECT))
 		WiimoteId = 1;
-	if (IsHotkey(event, HK_WIIMOTE3_CONNECT))
+	if (IsHotkey(HK_WIIMOTE3_CONNECT))
 		WiimoteId = 2;
-	if (IsHotkey(event, HK_WIIMOTE4_CONNECT))
+	if (IsHotkey(HK_WIIMOTE4_CONNECT))
 		WiimoteId = 3;
-	if (IsHotkey(event, HK_BALANCEBOARD_CONNECT))
+	if (IsHotkey(HK_BALANCEBOARD_CONNECT))
 		WiimoteId = 4;
 
 	// Actually perform the Wiimote connection or disconnection
@@ -1445,119 +1352,128 @@ void CFrame::ParseHotkeys(wxKeyEvent &event)
 		OnConnectWiimote(evt);
 	}
 
-	if (IsHotkey(event, HK_TOGGLE_IR))
+	if (IsHotkey(HK_TOGGLE_IR))
 	{
 		OSDChoice = 1;
 		// Toggle native resolution
 		if (++g_Config.iEFBScale > SCALE_4X)
 			g_Config.iEFBScale = SCALE_AUTO;
 	}
-	if (IsHotkey(event, HK_INCREASE_IR))
+	if (IsHotkey(HK_INCREASE_IR))
 	{
 		OSDChoice = 1;
 		++g_Config.iEFBScale;
 	}
-	if (IsHotkey(event, HK_DECREASE_IR))
+	if (IsHotkey(HK_DECREASE_IR))
 	{
 		OSDChoice = 1;
 		if (--g_Config.iEFBScale < SCALE_1X)
 			g_Config.iEFBScale = SCALE_1X;
 	}
-	if (IsHotkey(event, HK_TOGGLE_AR))
+	if (IsHotkey(HK_TOGGLE_AR))
 	{
 		OSDChoice = 2;
 		// Toggle aspect ratio
 		g_Config.iAspectRatio = (g_Config.iAspectRatio + 1) & 3;
 	}
-	if (IsHotkey(event, HK_TOGGLE_EFBCOPIES))
+	if (IsHotkey(HK_TOGGLE_EFBCOPIES))
 	{
 		OSDChoice = 3;
 		// Toggle EFB copies between EFB2RAM and EFB2Texture
 		g_Config.bSkipEFBCopyToRam = !g_Config.bSkipEFBCopyToRam;
 	}
-	if (IsHotkey(event, HK_TOGGLE_FOG))
+	if (IsHotkey(HK_TOGGLE_FOG))
 	{
 		OSDChoice = 4;
 		g_Config.bDisableFog = !g_Config.bDisableFog;
 	}
-	if (IsHotkey(event, HK_TOGGLE_THROTTLE, false))
-	{
-		Core::SetIsFramelimiterTempDisabled(false);
-	}
-	else if (IsHotkey(event, HK_TOGGLE_THROTTLE, true))
-	{
-		Core::SetIsFramelimiterTempDisabled(true);
-	}
-	if (IsHotkey(event, HK_DECREASE_FRAME_LIMIT))
+	Core::SetIsFramelimiterTempDisabled(IsHotkey(HK_TOGGLE_THROTTLE, true));
+	if (IsHotkey(HK_DECREASE_FRAME_LIMIT))
 	{
 		if (--SConfig::GetInstance().m_Framelimit > 0x19)
 			SConfig::GetInstance().m_Framelimit = 0x19;
 	}
-	if (IsHotkey(event, HK_INCREASE_FRAME_LIMIT))
+	if (IsHotkey(HK_INCREASE_FRAME_LIMIT))
 	{
 		if (++SConfig::GetInstance().m_Framelimit > 0x19)
 			SConfig::GetInstance().m_Framelimit = 0;
 	}
-	if (IsHotkey(event, HK_SAVE_STATE_SLOT_SELECTED))
+	if (IsHotkey(HK_SAVE_STATE_SLOT_SELECTED))
 	{
 		State::Save(g_saveSlot);
 	}
-	if (IsHotkey(event, HK_LOAD_STATE_SLOT_SELECTED))
+	if (IsHotkey(HK_LOAD_STATE_SLOT_SELECTED))
 	{
 		State::Load(g_saveSlot);
 	}
-	if (IsHotkey(event, HK_DECREASE_DEPTH, true))
+	if (IsHotkey(HK_DECREASE_DEPTH, true))
 	{
 		if (--g_Config.iStereoDepth < 0)
 			g_Config.iStereoDepth = 0;
 	}
-	if (IsHotkey(event, HK_INCREASE_DEPTH, true))
+	if (IsHotkey(HK_INCREASE_DEPTH, true))
 	{
 		if (++g_Config.iStereoDepth > 100)
 			g_Config.iStereoDepth = 100;
 	}
-	if (IsHotkey(event, HK_DECREASE_CONVERGENCE, true))
+	if (IsHotkey(HK_DECREASE_CONVERGENCE, true))
 	{
 		g_Config.iStereoConvergence -= 5;
 		if (g_Config.iStereoConvergence < 0)
 			g_Config.iStereoConvergence = 0;
 	}
-	if (IsHotkey(event, HK_INCREASE_CONVERGENCE, true))
+	if (IsHotkey(HK_INCREASE_CONVERGENCE, true))
 	{
 		g_Config.iStereoConvergence += 5;
 		if (g_Config.iStereoConvergence > 500)
 			g_Config.iStereoConvergence = 500;
 	}
 
-	for (i = HK_SELECT_STATE_SLOT_1; i < HK_SELECT_STATE_SLOT_10; ++i)
+	static float debugSpeed = 1.0f;
+	if (IsHotkey(HK_FREELOOK_DECREASE_SPEED, true))
+		debugSpeed /= 1.1f;
+	if (IsHotkey(HK_FREELOOK_INCREASE_SPEED, true))
+		debugSpeed *= 1.1f;
+	if (IsHotkey(HK_FREELOOK_RESET_SPEED, true))
+		debugSpeed = 1.0f;
+	if (IsHotkey(HK_FREELOOK_UP, true))
+		VertexShaderManager::TranslateView(0.0f, 0.0f, -debugSpeed);
+	if (IsHotkey(HK_FREELOOK_DOWN, true))
+		VertexShaderManager::TranslateView(0.0f, 0.0f, debugSpeed);
+	if (IsHotkey(HK_FREELOOK_LEFT, true))
+		VertexShaderManager::TranslateView(debugSpeed, 0.0f);
+	if (IsHotkey(HK_FREELOOK_RIGHT, true))
+		VertexShaderManager::TranslateView(-debugSpeed, 0.0f);
+	if (IsHotkey(HK_FREELOOK_ZOOM_IN, true))
+		VertexShaderManager::TranslateView(0.0f, debugSpeed);
+	if (IsHotkey(HK_FREELOOK_ZOOM_OUT, true))
+		VertexShaderManager::TranslateView(0.0f, -debugSpeed);
+	if (IsHotkey(HK_FREELOOK_RESET, true))
+		VertexShaderManager::ResetView();
+
+	// Savestates
+	for (int i = 0; i < 10; i++)
 	{
-		if (IsHotkey(event, i))
+		if (IsHotkey(HK_LOAD_STATE_SLOT_1 + i))
+			State::Load(1 + i);
+
+		if (IsHotkey(HK_SAVE_STATE_SLOT_1 + i))
+			State::Save(1 + i);
+
+		if (IsHotkey(HK_LOAD_LAST_STATE_1 + i))
+			State::LoadLastSaved(1 + i);
+
+		if (IsHotkey(HK_SELECT_STATE_SLOT_1 + i))
 		{
 			wxCommandEvent slot_event;
 			slot_event.SetId(i + IDM_SELECT_SLOT_1 - HK_SELECT_STATE_SLOT_1);
 			CFrame::OnSelectSlot(slot_event);
 		}
 	}
-
-	static float debugSpeed = 1.0f;
-	if (IsHotkey(event, HK_FREELOOK_DECREASE_SPEED, true))
-		debugSpeed /= 1.1f;
-	if (IsHotkey(event, HK_FREELOOK_INCREASE_SPEED, true))
-		debugSpeed *= 1.1f;
-	if (IsHotkey(event, HK_FREELOOK_RESET_SPEED, true))
-		debugSpeed = 1.0f;
-	if (IsHotkey(event, HK_FREELOOK_UP, true))
-		VertexShaderManager::TranslateView(0.0f, 0.0f, -debugSpeed);
-	if (IsHotkey(event, HK_FREELOOK_DOWN, true))
-		VertexShaderManager::TranslateView(0.0f, 0.0f, debugSpeed);
-	if (IsHotkey(event, HK_FREELOOK_LEFT, true))
-		VertexShaderManager::TranslateView(debugSpeed, 0.0f);
-	if (IsHotkey(event, HK_FREELOOK_RIGHT, true))
-		VertexShaderManager::TranslateView(-debugSpeed, 0.0f);
-	if (IsHotkey(event, HK_FREELOOK_ZOOM_IN, true))
-		VertexShaderManager::TranslateView(0.0f, debugSpeed);
-	if (IsHotkey(event, HK_FREELOOK_ZOOM_OUT, true))
-		VertexShaderManager::TranslateView(0.0f, -debugSpeed);
-	if (IsHotkey(event, HK_FREELOOK_RESET, true))
-		VertexShaderManager::ResetView();
+	if (IsHotkey(HK_SAVE_FIRST_STATE))
+		State::SaveFirstSaved();
+	if (IsHotkey(HK_UNDO_LOAD_STATE))
+		State::UndoLoadState();
+	if (IsHotkey(HK_UNDO_SAVE_STATE))
+		State::UndoSaveState();
 }
diff --git a/Source/Core/DolphinWX/Frame.h b/Source/Core/DolphinWX/Frame.h
index c600548d28..4460593497 100644
--- a/Source/Core/DolphinWX/Frame.h
+++ b/Source/Core/DolphinWX/Frame.h
@@ -306,7 +306,6 @@ private:
 	void OnConfigAudio(wxCommandEvent& event);
 	void OnConfigControllers(wxCommandEvent& event);
 	void OnConfigHotkey(wxCommandEvent& event);
-	void OnConfigMenuCommands(wxCommandEvent& event);
 
 	void OnToggleFullscreen(wxCommandEvent& event);
 	void OnToggleDualCore(wxCommandEvent& event);
@@ -352,7 +351,7 @@ private:
 	void OnLoadCurrentSlot(wxCommandEvent& event);
 
 	void PollHotkeys(wxTimerEvent&);
-	void ParseHotkeys(wxKeyEvent &event);
+	void ParseHotkeys();
 
 	bool InitControllers();
 
diff --git a/Source/Core/DolphinWX/FrameTools.cpp b/Source/Core/DolphinWX/FrameTools.cpp
index 04e31fbfaf..d56a8486b2 100644
--- a/Source/Core/DolphinWX/FrameTools.cpp
+++ b/Source/Core/DolphinWX/FrameTools.cpp
@@ -60,7 +60,6 @@
 #include "DolphinWX/Frame.h"
 #include "DolphinWX/GameListCtrl.h"
 #include "DolphinWX/Globals.h"
-#include "DolphinWX/HotkeyDlg.h"
 #include "DolphinWX/InputConfigDiag.h"
 #include "DolphinWX/ISOFile.h"
 #include "DolphinWX/LogWindow.h"
@@ -230,7 +229,6 @@ wxMenuBar* CFrame::CreateMenu()
 	pOptionsMenu->Append(IDM_CONFIG_GFX_BACKEND, _("&Graphics Settings"));
 	pOptionsMenu->Append(IDM_CONFIG_AUDIO, _("&Audio Settings"));
 	pOptionsMenu->Append(IDM_CONFIG_CONTROLLERS, _("&Controller Settings"));
-	pOptionsMenu->Append(IDM_CONFIG_MENU_COMMANDS, _("&Key Shortcuts"));
 	pOptionsMenu->Append(IDM_CONFIG_HOTKEYS, _("&Hotkey Settings"));
 	if (g_pCodeWindow)
 	{
@@ -390,11 +388,7 @@ wxMenuBar* CFrame::CreateMenu()
 
 wxString CFrame::GetMenuLabel(int Id)
 {
-	int hotkey = SConfig::GetInstance().\
-		m_LocalCoreStartupParameter.iHotkey[Id];
-	int hotkeymodifier = SConfig::GetInstance().\
-		m_LocalCoreStartupParameter.iHotkeyModifier[Id];
-	wxString Hotkey, Label, Modifier;
+	wxString Label;
 
 	switch (Id)
 	{
@@ -533,14 +527,7 @@ wxString CFrame::GetMenuLabel(int Id)
 			Label = wxString::Format(_("Undefined %i"), Id);
 	}
 
-	hotkeymodifier &= wxMOD_CONTROL | wxMOD_ALT | wxMOD_SHIFT;
-
-	Modifier = WxUtils::WXKeymodToString(hotkeymodifier);
-	Hotkey = WxUtils::WXKeyToString(hotkey);
-	if (Modifier.Len() + Hotkey.Len() > 0)
-		Label += '\t';
-
-	return Label + Modifier + Hotkey;
+	return Label;
 }
 
 
@@ -1059,8 +1046,6 @@ void CFrame::StartGame(const std::string& filename)
 
 		m_RenderParent->SetFocus();
 
-		wxTheApp->Bind(wxEVT_KEY_DOWN,     &CFrame::OnKeyDown,     this);
-		wxTheApp->Bind(wxEVT_KEY_UP,       &CFrame::OnKeyUp,       this);
 		wxTheApp->Bind(wxEVT_RIGHT_DOWN,   &CFrame::OnMouse,       this);
 		wxTheApp->Bind(wxEVT_RIGHT_UP,     &CFrame::OnMouse,       this);
 		wxTheApp->Bind(wxEVT_MIDDLE_DOWN,  &CFrame::OnMouse,       this);
@@ -1222,10 +1207,6 @@ void CFrame::OnStopped()
 	// Destroy the renderer frame when not rendering to main
 	m_RenderParent->Unbind(wxEVT_SIZE, &CFrame::OnRenderParentResize, this);
 
-	// Keyboard
-	wxTheApp->Unbind(wxEVT_KEY_DOWN,    &CFrame::OnKeyDown, this);
-	wxTheApp->Unbind(wxEVT_KEY_UP,      &CFrame::OnKeyUp,   this);
-
 	// Mouse
 	wxTheApp->Unbind(wxEVT_RIGHT_DOWN,  &CFrame::OnMouse, this);
 	wxTheApp->Unbind(wxEVT_RIGHT_UP,    &CFrame::OnMouse, this);
@@ -1340,16 +1321,6 @@ void CFrame::OnConfigControllers(wxCommandEvent& WXUNUSED (event))
 	config_dlg.ShowModal();
 }
 
-void CFrame::OnConfigMenuCommands(wxCommandEvent& WXUNUSED(event))
-{
-	HotkeyConfigDialog m_HotkeyDialog(this);
-	m_HotkeyDialog.ShowModal();
-
-	// Update the GUI in case menu accelerators were changed
-	UpdateGUI();
-}
-
-
 void CFrame::OnConfigHotkey(wxCommandEvent& WXUNUSED (event))
 {
 	InputConfig* const hotkey_plugin = HotkeyManagerEmu::GetConfig();
diff --git a/Source/Core/DolphinWX/Globals.h b/Source/Core/DolphinWX/Globals.h
index 246d3e384c..2b327b0fad 100644
--- a/Source/Core/DolphinWX/Globals.h
+++ b/Source/Core/DolphinWX/Globals.h
@@ -158,7 +158,6 @@ enum
 	IDM_CONFIG_AUDIO,
 	IDM_CONFIG_CONTROLLERS,
 	IDM_CONFIG_HOTKEYS,
-	IDM_CONFIG_MENU_COMMANDS,
 	IDM_CONFIG_LOGGER,
 
 	// Views
diff --git a/Source/Core/DolphinWX/HotkeyDlg.cpp b/Source/Core/DolphinWX/HotkeyDlg.cpp
deleted file mode 100644
index 74a12f0863..0000000000
--- a/Source/Core/DolphinWX/HotkeyDlg.cpp
+++ /dev/null
@@ -1,360 +0,0 @@
-// Copyright 2010 Dolphin Emulator Project
-// Licensed under GPLv2+
-// Refer to the license.txt file included.
-
-#include <cstddef>
-#include <wx/button.h>
-#include <wx/dialog.h>
-#include <wx/font.h>
-#include <wx/gbsizer.h>
-#include <wx/notebook.h>
-#include <wx/panel.h>
-#include <wx/sizer.h>
-#include <wx/stattext.h>
-#include <wx/timer.h>
-
-#include "Core/ConfigManager.h"
-#include "Core/CoreParameter.h"
-#include "DolphinWX/HotkeyDlg.h"
-#include "DolphinWX/WXInputBase.h"
-
-HotkeyConfigDialog::HotkeyConfigDialog(wxWindow *parent, wxWindowID id, const wxString &title,
-		const wxPoint &position, const wxSize& size, long style)
-: wxDialog(parent, id, title, position, size, style)
-, m_ButtonMappingTimer(this)
-{
-	CreateHotkeyGUIControls();
-
-	Bind(wxEVT_BUTTON, &HotkeyConfigDialog::OnButtonClick, this, 0, NUM_HOTKEYS - 1);
-	Bind(wxEVT_TIMER, &HotkeyConfigDialog::OnButtonTimer, this);
-
-	g_Pressed = 0;
-	g_Modkey = 0;
-	ClickedButton = nullptr;
-	GetButtonWaitingID = 0;
-	GetButtonWaitingTimer = 0;
-}
-
-HotkeyConfigDialog::~HotkeyConfigDialog()
-{
-}
-
-// Save keyboard key mapping
-void HotkeyConfigDialog::SaveButtonMapping(int Id, int Key, int Modkey)
-{
-	SConfig::GetInstance().m_LocalCoreStartupParameter.iHotkey[Id] = Key;
-	SConfig::GetInstance().m_LocalCoreStartupParameter.iHotkeyModifier[Id] = Modkey;
-}
-
-void HotkeyConfigDialog::EndGetButtons()
-{
-	m_ButtonMappingTimer.Stop();
-	GetButtonWaitingTimer = 0;
-	GetButtonWaitingID = 0;
-	ClickedButton = nullptr;
-	SetEscapeId(wxID_ANY);
-}
-
-void HotkeyConfigDialog::OnKeyDown(wxKeyEvent& event)
-{
-	if (ClickedButton != nullptr)
-	{
-		// Save the key
-		g_Pressed = event.GetKeyCode();
-		g_Modkey = event.GetModifiers();
-
-		// Don't allow modifier keys
-		if (g_Pressed == WXK_CONTROL || g_Pressed == WXK_ALT ||
-			g_Pressed == WXK_SHIFT || g_Pressed == WXK_COMMAND)
-			return;
-
-		// Use the space key to set a blank key
-		if (g_Pressed == WXK_SPACE)
-		{
-			SaveButtonMapping(ClickedButton->GetId(), -1, 0);
-			SetButtonText(ClickedButton->GetId(), wxString());
-		}
-		else
-		{
-			// Check if the hotkey combination was already applied to another button
-			// and unapply it if necessary.
-			for (wxButton* btn : m_Button_Hotkeys)
-			{
-				// We compare against this to see if we have a duplicate bind attempt.
-				wxString existingHotkey = btn->GetLabel();
-
-				wxString tentativeModKey = WxUtils::WXKeymodToString(g_Modkey);
-				wxString tentativePressedKey = WxUtils::WXKeyToString(g_Pressed);
-				wxString tentativeHotkey(tentativeModKey + tentativePressedKey);
-
-				// Found a button that already has this binding. Unbind it.
-				if (tentativeHotkey == existingHotkey)
-				{
-					SaveButtonMapping(btn->GetId(), -1, 0);
-					SetButtonText(btn->GetId(), wxString());
-				}
-			}
-
-			// Proceed to apply the binding to the selected button.
-			SetButtonText(ClickedButton->GetId(),
-					WxUtils::WXKeyToString(g_Pressed),
-					WxUtils::WXKeymodToString(g_Modkey));
-			SaveButtonMapping(ClickedButton->GetId(), g_Pressed, g_Modkey);
-		}
-		EndGetButtons();
-	}
-}
-
-// Update the textbox for the buttons
-void HotkeyConfigDialog::SetButtonText(int id, const wxString &keystr, const wxString &modkeystr)
-{
-	m_Button_Hotkeys[id]->SetLabel(modkeystr + keystr);
-}
-
-void HotkeyConfigDialog::DoGetButtons(int _GetId)
-{
-	// Values used in this function
-	const int Seconds = 4; // Seconds to wait for
-	const int TimesPerSecond = 40; // How often to run the check
-
-	// If the Id has changed or the timer is not running we should start one
-	if ( GetButtonWaitingID != _GetId || !m_ButtonMappingTimer.IsRunning() )
-	{
-		if (m_ButtonMappingTimer.IsRunning())
-			m_ButtonMappingTimer.Stop();
-
-		// Save the button Id
-		GetButtonWaitingID = _GetId;
-		GetButtonWaitingTimer = 0;
-
-		// Start the timer
-		m_ButtonMappingTimer.Start(1000 / TimesPerSecond);
-	}
-
-	// Process results
-	// Count each time
-	GetButtonWaitingTimer++;
-
-	// This is run every second
-	if (GetButtonWaitingTimer % TimesPerSecond == 0)
-	{
-		// Current time
-		int TmpTime = Seconds - (GetButtonWaitingTimer / TimesPerSecond);
-		// Update text
-		SetButtonText(_GetId, wxString::Format("[ %d ]", TmpTime));
-	}
-
-	// Time's up
-	if (GetButtonWaitingTimer / TimesPerSecond >= Seconds)
-	{
-		// Revert back to old label
-		SetButtonText(_GetId, OldLabel);
-		EndGetButtons();
-	}
-}
-
-// Input button clicked
-void HotkeyConfigDialog::OnButtonClick(wxCommandEvent& event)
-{
-	event.Skip();
-
-	if (m_ButtonMappingTimer.IsRunning())
-		return;
-
-	// Get the button
-	ClickedButton = (wxButton *)event.GetEventObject();
-	SetEscapeId(wxID_CANCEL);
-	// Save old label so we can revert back
-	OldLabel = ClickedButton->GetLabel();
-	ClickedButton->SetWindowStyle(wxWANTS_CHARS);
-	ClickedButton->SetLabel(_("<Press Key>"));
-	DoGetButtons(ClickedButton->GetId());
-}
-
-#define HOTKEY_NUM_COLUMNS 2
-
-const wxString hkText[] =
-{
-	_("Open"),
-	_("Change Disc"),
-	_("Refresh List"),
-
-	_("Play/Pause"),
-	_("Stop"),
-	_("Reset"),
-	_("Frame Advance"),
-
-	_("Start Recording"),
-	_("Play Recording"),
-	_("Export Recording"),
-	_("Read-only mode"),
-
-	_("Toggle Fullscreen"),
-	_("Take Screenshot"),
-	_("Exit"),
-
-	_("Connect Wiimote 1"),
-	_("Connect Wiimote 2"),
-	_("Connect Wiimote 3"),
-	_("Connect Wiimote 4"),
-	_("Connect Balance Board"),
-
-	_("Volume Down"),
-	_("Volume Up"),
-	_("Volume Toggle Mute"),
-
-	_("Increase IR"),
-	_("Decrease IR"),
-
-	_("Toggle IR"),
-	_("Toggle Aspect Ratio"),
-	_("Toggle EFB Copies"),
-	_("Toggle Fog"),
-	_("Toggle Frame limit"),
-	_("Decrease Frame limit"),
-	_("Increase Frame limit"),
-
-	_("Freelook Decrease Speed"),
-	_("Freelook Increase Speed"),
-	_("Freelook Reset Speed"),
-	_("Freelook Move Up"),
-	_("Freelook Move Down"),
-	_("Freelook Move Left"),
-	_("Freelook Move Right"),
-	_("Freelook Zoom In"),
-	_("Freelook Zoom Out"),
-	_("Freelook Reset"),
-
-	_("Decrease Depth"),
-	_("Increase Depth"),
-	_("Decrease Convergence"),
-	_("Increase Convergence"),
-
-	_("Load State Slot 1"),
-	_("Load State Slot 2"),
-	_("Load State Slot 3"),
-	_("Load State Slot 4"),
-	_("Load State Slot 5"),
-	_("Load State Slot 6"),
-	_("Load State Slot 7"),
-	_("Load State Slot 8"),
-	_("Load State Slot 9"),
-	_("Load State Slot 10"),
-
-	_("Save State Slot 1"),
-	_("Save State Slot 2"),
-	_("Save State Slot 3"),
-	_("Save State Slot 4"),
-	_("Save State Slot 5"),
-	_("Save State Slot 6"),
-	_("Save State Slot 7"),
-	_("Save State Slot 8"),
-	_("Save State Slot 9"),
-	_("Save State Slot 10"),
-
-	_("Select State Slot 1"),
-	_("Select State Slot 2"),
-	_("Select State Slot 3"),
-	_("Select State Slot 4"),
-	_("Select State Slot 5"),
-	_("Select State Slot 6"),
-	_("Select State Slot 7"),
-	_("Select State Slot 8"),
-	_("Select State Slot 9"),
-	_("Select State Slot 10"),
-
-	_("Save to selected slot"),
-	_("Load from selected slot"),
-
-	_("Load State Last 1"),
-	_("Load State Last 2"),
-	_("Load State Last 3"),
-	_("Load State Last 4"),
-	_("Load State Last 5"),
-	_("Load State Last 6"),
-	_("Load State Last 7"),
-	_("Load State Last 8"),
-
-	_("Save Oldest State"),
-	_("Undo Load State"),
-	_("Undo Save State"),
-	_("Save State"),
-	_("Load State"),
-};
-
-void HotkeyConfigDialog::CreateHotkeyGUIControls()
-{
-	const wxString pageNames[] =
-	{
-		_("General"),
-		_("State Saves")
-	};
-
-	const int page_breaks[3] = {HK_OPEN, HK_LOAD_STATE_SLOT_1, NUM_HOTKEYS};
-
-	// Configuration controls sizes
-	wxSize size(100,20);
-	// A small type font
-	wxFont m_SmallFont(7, wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_NORMAL);
-
-	wxNotebook *Notebook = new wxNotebook(this, wxID_ANY);
-
-	for (int j = 0; j < 2; j++)
-	{
-		wxPanel *Page = new wxPanel(Notebook);
-		Notebook->AddPage(Page, pageNames[j]);
-
-		wxGridBagSizer *sHotkeys = new wxGridBagSizer();
-
-		// Header line
-		for (int i = 0; i < HOTKEY_NUM_COLUMNS; i++)
-		{
-			wxBoxSizer *HeaderSizer = new wxBoxSizer(wxHORIZONTAL);
-			wxStaticText *StaticTextHeader = new wxStaticText(Page, wxID_ANY, _("Action"));
-			HeaderSizer->Add(StaticTextHeader, 1, wxALL, 2);
-			StaticTextHeader = new wxStaticText(Page, wxID_ANY, _("Key"), wxDefaultPosition, size);
-			HeaderSizer->Add(StaticTextHeader, 0, wxALL, 2);
-			sHotkeys->Add(HeaderSizer, wxGBPosition(0, i), wxDefaultSpan, wxEXPAND | wxLEFT, (i > 0) ? 30 : 1);
-		}
-
-		int column_break = (page_breaks[j+1] + page_breaks[j] + 1) / 2;
-
-		for (int i = page_breaks[j]; i < page_breaks[j+1]; i++)
-		{
-			// Text for the action
-			wxStaticText *stHotkeys = new wxStaticText(Page, wxID_ANY, hkText[i]);
-
-			// Key selection button
-			m_Button_Hotkeys[i] = new wxButton(Page, i, wxEmptyString, wxDefaultPosition, size);
-			m_Button_Hotkeys[i]->SetFont(m_SmallFont);
-			m_Button_Hotkeys[i]->SetToolTip(_("Left click to detect hotkeys.\nEnter space to clear."));
-			m_Button_Hotkeys[i]->Bind(wxEVT_KEY_DOWN, &HotkeyConfigDialog::OnKeyDown, this);
-			SetButtonText(i,
-					WxUtils::WXKeyToString(SConfig::GetInstance().m_LocalCoreStartupParameter.iHotkey[i]),
-					WxUtils::WXKeymodToString(
-						SConfig::GetInstance().m_LocalCoreStartupParameter.iHotkeyModifier[i]));
-
-			wxBoxSizer *sHotkey = new wxBoxSizer(wxHORIZONTAL);
-			sHotkey->Add(stHotkeys, 1, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL | wxALL, 2);
-			sHotkey->Add(m_Button_Hotkeys[i], 0, wxALL, 2);
-			sHotkeys->Add(sHotkey,
-					wxGBPosition((i < column_break) ? i - page_breaks[j] + 1 : i - column_break + 1,
-						(i < column_break) ? 0 : 1),
-					wxDefaultSpan, wxEXPAND | wxLEFT, (i < column_break) ? 1 : 30);
-		}
-
-		wxStaticBoxSizer *sHotkeyBox = new wxStaticBoxSizer(wxVERTICAL, Page, _("Hotkeys"));
-		sHotkeyBox->Add(sHotkeys);
-
-		wxBoxSizer* const sPage = new wxBoxSizer(wxVERTICAL);
-		sPage->Add(sHotkeyBox, 0, wxEXPAND | wxALL, 5);
-		Page->SetSizer(sPage);
-	}
-
-	wxBoxSizer *sMainSizer = new wxBoxSizer(wxVERTICAL);
-	sMainSizer->Add(Notebook, 0, wxEXPAND | wxALL, 5);
-	sMainSizer->Add(CreateButtonSizer(wxOK), 0, wxEXPAND | wxLEFT | wxRIGHT | wxDOWN, 5);
-	SetSizerAndFit(sMainSizer);
-	SetFocus();
-}
-
diff --git a/Source/Core/DolphinWX/HotkeyDlg.h b/Source/Core/DolphinWX/HotkeyDlg.h
deleted file mode 100644
index a713a0789f..0000000000
--- a/Source/Core/DolphinWX/HotkeyDlg.h
+++ /dev/null
@@ -1,50 +0,0 @@
-// Copyright 2010 Dolphin Emulator Project
-// Licensed under GPLv2+
-// Refer to the license.txt file included.
-
-#pragma once
-
-#include <wx/dialog.h>
-#include <wx/timer.h>
-
-#include "Core/CoreParameter.h"
-
-#if defined(HAVE_X11) && HAVE_X11
-#include <X11/Xlib.h>
-#include <X11/keysym.h>
-#endif
-
-class wxButton;
-
-class HotkeyConfigDialog : public wxDialog
-{
-public:
-	HotkeyConfigDialog(wxWindow* parent,
-			wxWindowID id = wxID_ANY,
-			const wxString &title = _("Key Shortcuts"),
-			const wxPoint& pos = wxDefaultPosition,
-			const wxSize& size = wxDefaultSize,
-			long style = wxDEFAULT_DIALOG_STYLE);
-	virtual ~HotkeyConfigDialog();
-
-private:
-	wxString OldLabel;
-
-	wxButton* ClickedButton;
-	wxButton* m_Button_Hotkeys[NUM_HOTKEYS];
-
-	wxTimer m_ButtonMappingTimer;
-
-	void OnButtonTimer(wxTimerEvent& WXUNUSED(event)) { DoGetButtons(GetButtonWaitingID); }
-	void OnButtonClick(wxCommandEvent& event);
-	void OnKeyDown(wxKeyEvent& event);
-	void SaveButtonMapping(int Id, int Key, int Modkey);
-	void CreateHotkeyGUIControls();
-
-	void SetButtonText(int id, const wxString &keystr, const wxString &modkeystr = wxString());
-
-	void DoGetButtons(int id);
-	void EndGetButtons();
-
-	int GetButtonWaitingID, GetButtonWaitingTimer, g_Pressed, g_Modkey;
-};