(view as text)
diff --git a/Source/Core/Common/ArmCPUDetect.cpp b/Source/Core/Common/ArmCPUDetect.cpp
index 65353ba..12998e1 100644
--- a/Source/Core/Common/ArmCPUDetect.cpp
+++ b/Source/Core/Common/ArmCPUDetect.cpp
@@ -5,6 +5,7 @@
 #include "Common/Common.h"
 #include "Common/CPUDetect.h"
 #include "Common/FileUtil.h"
+#include "Common/StringUtil.h"
 
 // Only Linux platforms have /proc/cpuinfo
 #if !defined(BLACKBERRY) && !defined(IOS) && !defined(__SYMBIAN32__)
diff --git a/Source/Core/Common/Atomic.h b/Source/Core/Common/Atomic.h
index 88e38ed..c76dcb7 100644
--- a/Source/Core/Common/Atomic.h
+++ b/Source/Core/Common/Atomic.h
@@ -6,11 +6,11 @@
 
 #ifdef _WIN32
 
-#include "Common/Atomic_Win32.h"
+#include "Common/Atomic_Win32.h" // IWYU pragma: export
 
 #else
 
 // GCC-compatible compiler assumed!
-#include "Common/Atomic_GCC.h"
+#include "Common/Atomic_GCC.h" // IWYU pragma: export
 
 #endif
diff --git a/Source/Core/Common/Atomic_GCC.h b/Source/Core/Common/Atomic_GCC.h
index b6aef1a..f066280 100644
--- a/Source/Core/Common/Atomic_GCC.h
+++ b/Source/Core/Common/Atomic_GCC.h
@@ -2,6 +2,8 @@
 // Licensed under GPLv2
 // Refer to the license.txt file included.
 
+// IWYU pragma: private, include "Common/Atomic.h"
+
 #pragma once
 
 #include "Common/Common.h"
diff --git a/Source/Core/Common/Atomic_Win32.h b/Source/Core/Common/Atomic_Win32.h
index 2615d94..dcc8585 100644
--- a/Source/Core/Common/Atomic_Win32.h
+++ b/Source/Core/Common/Atomic_Win32.h
@@ -2,6 +2,8 @@
 // Licensed under GPLv2
 // Refer to the license.txt file included.
 
+// IWYU pragma: private, include "Common/Atomic.h"
+
 #pragma once
 
 #include <intrin.h>
diff --git a/Source/Core/Common/BreakPoints.cpp b/Source/Core/Common/BreakPoints.cpp
index 326f4df..efafabc 100644
--- a/Source/Core/Common/BreakPoints.cpp
+++ b/Source/Core/Common/BreakPoints.cpp
@@ -3,11 +3,14 @@
 // Refer to the license.txt file included.
 
 #include <sstream>
+#include <string>
+#include <vector>
 
 #include "Common/BreakPoints.h"
 #include "Common/Common.h"
 #include "Common/DebugInterface.h"
 #include "Core/PowerPC/JitCommon/JitBase.h"
+#include "Core/PowerPC/JitCommon/JitCache.h"
 
 bool BreakPoints::IsAddressBreakPoint(u32 _iAddress)
 {
diff --git a/Source/Core/Common/CDUtils.cpp b/Source/Core/Common/CDUtils.cpp
index 156b758..4adcf7c 100644
--- a/Source/Core/Common/CDUtils.cpp
+++ b/Source/Core/Common/CDUtils.cpp
@@ -1,6 +1,9 @@
 // Most of the code in this file was shamelessly ripped from libcdio With minor adjustments
 
-#include <memory> // for std::unique_ptr
+#include <algorithm>
+#include <cstdlib>
+#include <string>
+#include <vector>
 
 #include "Common/CDUtils.h"
 #include "Common/Common.h"
@@ -19,6 +22,7 @@
 #include <fcntl.h>
 #include <sys/stat.h>
 #include <sys/ioctl.h>
+#include <unistd.h>
 #endif // WIN32
 
 #ifdef __linux__
diff --git a/Source/Core/Common/ChunkFile.h b/Source/Core/Common/ChunkFile.h
index fe33d6c..bc9da61 100644
--- a/Source/Core/Common/ChunkFile.h
+++ b/Source/Core/Common/ChunkFile.h
@@ -13,12 +13,14 @@
 // - Zero backwards/forwards compatibility
 // - Serialization code for anything complex has to be manually written.
 
+#include <cstddef>
 #include <deque>
 #include <list>
 #include <map>
 #include <set>
 #include <string>
 #include <type_traits>
+#include <utility>
 #include <vector>
 
 #include "Common/Common.h"
diff --git a/Source/Core/Common/Common.h b/Source/Core/Common/Common.h
index b5d78ba..7d9362e 100644
--- a/Source/Core/Common/Common.h
+++ b/Source/Core/Common/Common.h
@@ -168,7 +168,7 @@ enum EMUSTATE_CHANGE
 	EMUSTATE_CHANGE_STOP
 };
 
-#include "Common/CommonTypes.h"
-#include "Common/CommonFuncs.h" // NOLINT: needs to be included after CommonTypes
-#include "Common/Log.h"
-#include "Common/MsgHandler.h"
+#include "Common/CommonTypes.h" // IWYU pragma: export
+#include "Common/CommonFuncs.h" // IWYU pragma: export // NOLINT
+#include "Common/Log.h" // IWYU pragma: export
+#include "Common/MsgHandler.h" // IWYU pragma: export
diff --git a/Source/Core/Common/CommonPaths.h b/Source/Core/Common/CommonPaths.h
index dc05b92..c9acf5d 100644
--- a/Source/Core/Common/CommonPaths.h
+++ b/Source/Core/Common/CommonPaths.h
@@ -4,9 +4,6 @@
 
 #pragma once
 
-// Make sure we pick up USER_DIR if set in config.h
-#include "Common/Common.h"
-
 // Directory seperators, do we need this?
 #define DIR_SEP "/"
 #define DIR_SEP_CHR '/'
diff --git a/Source/Core/Common/CommonTypes.h b/Source/Core/Common/CommonTypes.h
index 6ec7045..530ade2 100644
--- a/Source/Core/Common/CommonTypes.h
+++ b/Source/Core/Common/CommonTypes.h
@@ -9,7 +9,6 @@
 
 #pragma once
 
-#include <cstddef>
 #include <cstdint>
 
 #ifdef _WIN32
diff --git a/Source/Core/Common/DebugInterface.h b/Source/Core/Common/DebugInterface.h
index b1df414..b90dd46 100644
--- a/Source/Core/Common/DebugInterface.h
+++ b/Source/Core/Common/DebugInterface.h
@@ -1,5 +1,6 @@
 #pragma once
 
+#include <cstring>
 #include <string>
 
 class DebugInterface
diff --git a/Source/Core/Common/FifoQueue.h b/Source/Core/Common/FifoQueue.h
index b6e237a..168b28e 100644
--- a/Source/Core/Common/FifoQueue.h
+++ b/Source/Core/Common/FifoQueue.h
@@ -3,7 +3,11 @@
 // a simple lockless thread-safe,
 // single reader, single writer queue
 
+#include <algorithm>
+#include <cstddef>
+
 #include "Common/Atomic.h"
+#include "Common/CommonTypes.h"
 
 namespace Common
 {
diff --git a/Source/Core/Common/FileSearch.cpp b/Source/Core/Common/FileSearch.cpp
index 4cecb2b..2fe3604 100644
--- a/Source/Core/Common/FileSearch.cpp
+++ b/Source/Core/Common/FileSearch.cpp
@@ -3,14 +3,13 @@
 // Refer to the license.txt file included.
 
 #include <algorithm>
+#include <cstring>
 
-#include "Common/Common.h"
 #include "Common/CommonPaths.h"
 #include "Common/FileSearch.h"
 #include "Common/StringUtil.h"
 
 #ifndef _WIN32
-#include <sys/types.h>
 #include <dirent.h>
 #else
 #include <windows.h>
diff --git a/Source/Core/Common/FileUtil.cpp b/Source/Core/Common/FileUtil.cpp
index 561435f..9765af6 100644
--- a/Source/Core/Common/FileUtil.cpp
+++ b/Source/Core/Common/FileUtil.cpp
@@ -3,9 +3,16 @@
 // Refer to the license.txt file included.
 
 #include <algorithm>
+#include <cstddef>
+#include <cstdio>
+#include <cstring>
 #include <fcntl.h>
+#include <limits.h>
+#include <string>
+#include <vector>
 #include <sys/stat.h>
 
+#include "Common/Common.h"
 #include "Common/CommonPaths.h"
 #include "Common/FileUtil.h"
 
@@ -21,14 +28,14 @@
 #include <errno.h>
 #include <libgen.h>
 #include <stdlib.h>
-#include <sys/param.h>
-#include <sys/types.h>
+#include <unistd.h>
 #endif
 
 #if defined(__APPLE__)
 #include <CoreFoundation/CFBundle.h>
 #include <CoreFoundation/CFString.h>
 #include <CoreFoundation/CFURL.h>
+#include <sys/param.h>
 #endif
 
 #ifndef S_ISDIR
diff --git a/Source/Core/Common/FileUtil.h b/Source/Core/Common/FileUtil.h
index 1b49d4d..06ee32f 100644
--- a/Source/Core/Common/FileUtil.h
+++ b/Source/Core/Common/FileUtil.h
@@ -4,14 +4,17 @@
 
 #pragma once
 
+#include <cstddef>
 #include <cstdio>
 #include <fstream>
 #include <string>
-#include <string.h>
 #include <vector>
 
 #include "Common/Common.h"
+
+#ifdef _WIN32
 #include "Common/StringUtil.h"
+#endif
 
 // User directory indices for GetUserPath
 enum {
diff --git a/Source/Core/Common/FixedSizeQueue.h b/Source/Core/Common/FixedSizeQueue.h
index b6b9b0a..36cb9b1 100644
--- a/Source/Core/Common/FixedSizeQueue.h
+++ b/Source/Core/Common/FixedSizeQueue.h
@@ -4,6 +4,8 @@
 
 #pragma once
 
+#include <cstddef>
+
 // STL-look-a-like interface, but name is mixed case to distinguish it clearly from the
 // real STL classes.
 
diff --git a/Source/Core/Common/GenericFPURoundMode.cpp b/Source/Core/Common/GenericFPURoundMode.cpp
index c8e70a4..548e029 100644
--- a/Source/Core/Common/GenericFPURoundMode.cpp
+++ b/Source/Core/Common/GenericFPURoundMode.cpp
@@ -15,7 +15,8 @@
 // Official SVN repository and contact information can be found at
 // http://code.google.com/p/dolphin-emu/
 
-#include "FPURoundMode.h"
+#include "Common/CommonTypes.h"
+#include "Common/FPURoundMode.h"
 
 // Generic, do nothing
 namespace FPURoundMode
diff --git a/Source/Core/Common/Hash.h b/Source/Core/Common/Hash.h
index a27a1c7..868ccad 100644
--- a/Source/Core/Common/Hash.h
+++ b/Source/Core/Common/Hash.h
@@ -4,6 +4,8 @@
 
 #pragma once
 
+#include <cstddef>
+
 #include "Common/Common.h"
 
 u32 HashFletcher(const u8* data_u8, size_t length);  // FAST. Length & 1 == 0.
diff --git a/Source/Core/Common/IniFile.cpp b/Source/Core/Common/IniFile.cpp
index 8430f01..0637342 100644
--- a/Source/Core/Common/IniFile.cpp
+++ b/Source/Core/Common/IniFile.cpp
@@ -6,13 +6,15 @@
 // see IniFile.h
 
 #include <algorithm>
-#include <cstdio>
-#include <cstdlib>
+#include <cstddef>
+#include <cstring>
 #include <fstream>
-#include <iostream>
+#include <map>
 #include <string>
+#include <utility>
 #include <vector>
 
+#include "Common/CommonTypes.h"
 #include "Common/FileUtil.h"
 #include "Common/IniFile.h"
 #include "Common/StringUtil.h"
diff --git a/Source/Core/Common/IniFile.h b/Source/Core/Common/IniFile.h
index c057b32..7db66e4 100644
--- a/Source/Core/Common/IniFile.h
+++ b/Source/Core/Common/IniFile.h
@@ -4,11 +4,12 @@
 
 #pragma once
 
+#include <cstring>
 #include <map>
-#include <set>
 #include <string>
 #include <vector>
 
+#include "Common/CommonTypes.h"
 #include "Common/StringUtil.h"
 
 struct CaseInsensitiveStringCompare
diff --git a/Source/Core/Common/LinearDiskCache.h b/Source/Core/Common/LinearDiskCache.h
index 20c689d..ea7ee1b 100644
--- a/Source/Core/Common/LinearDiskCache.h
+++ b/Source/Core/Common/LinearDiskCache.h
@@ -4,6 +4,7 @@
 
 #pragma once
 
+#include <cstring>
 #include <fstream>
 
 #include "Common/Common.h"
diff --git a/Source/Core/Common/LogManager.cpp b/Source/Core/Common/LogManager.cpp
index a880b66..860ad49 100644
--- a/Source/Core/Common/LogManager.cpp
+++ b/Source/Core/Common/LogManager.cpp
@@ -2,14 +2,20 @@
 // Licensed under GPLv2
 // Refer to the license.txt file included.
 
-#include <algorithm>
+#include <cstdarg>
+#include <cstring>
+#include <mutex>
+#include <ostream>
+#include <set>
+#include <string>
 
 #ifdef ANDROID
 #include "Core/Host.h"
 #endif
 #include "Common/FileUtil.h"
+#include "Common/Log.h"
 #include "Common/LogManager.h"
-#include "Common/Thread.h"
+#include "Common/StringUtil.h"
 #include "Common/Timer.h"
 
 void GenericLog(LogTypes::LOG_LEVELS level, LogTypes::LOG_TYPE type,
diff --git a/Source/Core/Common/LogManager.h b/Source/Core/Common/LogManager.h
index ffd2e7e..7ca1da3 100644
--- a/Source/Core/Common/LogManager.h
+++ b/Source/Core/Common/LogManager.h
@@ -4,13 +4,12 @@
 
 #pragma once
 
+#include <cstdarg>
+#include <fstream>
+#include <mutex>
 #include <set>
-#include <string.h>
 
-#include "Common/FileUtil.h"
-#include "Common/Log.h"
-#include "Common/StringUtil.h"
-#include "Common/Thread.h"
+#include "Common/Common.h"
 
 #define MAX_MESSAGES 8000
 #define MAX_MSGLEN  1024
diff --git a/Source/Core/Common/MathUtil.cpp b/Source/Core/Common/MathUtil.cpp
index 5b3f870..de56fb6 100644
--- a/Source/Core/Common/MathUtil.cpp
+++ b/Source/Core/Common/MathUtil.cpp
@@ -3,8 +3,10 @@
 // Refer to the license.txt file included.
 
 #include <cmath>
+#include <cstring>
 #include <numeric>
 
+#include "Common/CommonTypes.h"
 #include "Common/MathUtil.h"
 
 namespace MathUtil
diff --git a/Source/Core/Common/MathUtil.h b/Source/Core/Common/MathUtil.h
index 2cd1d8f..da12822 100644
--- a/Source/Core/Common/MathUtil.h
+++ b/Source/Core/Common/MathUtil.h
@@ -4,10 +4,10 @@
 
 #pragma once
 
+#include <cstdlib>
 #include <vector>
 
 #include "Common/Common.h"
-#include "Common/FPURoundMode.h"
 
 namespace MathUtil
 {
diff --git a/Source/Core/Common/MemArena.cpp b/Source/Core/Common/MemArena.cpp
index 4a7c305..e4e68fc 100644
--- a/Source/Core/Common/MemArena.cpp
+++ b/Source/Core/Common/MemArena.cpp
@@ -2,20 +2,23 @@
 // Licensed under GPLv2
 // Refer to the license.txt file included.
 
+#include <cstddef>
+#include <cstdlib>
 #include <set>
+#include <string>
 
+#include "Common/Common.h"
 #include "Common/MemArena.h"
-#include "Common/MemoryUtil.h"
 #include "Common/StringUtil.h"
 
 #ifdef _WIN32
 #include <windows.h>
 #else
-#include <sys/stat.h>
-#include <fcntl.h>
-#include <unistd.h>
 #include <cerrno>
 #include <cstring>
+#include <fcntl.h>
+#include <unistd.h>
+#include <sys/mman.h>
 #ifdef ANDROID
 #include <sys/ioctl.h>
 #include <linux/ashmem.h>
diff --git a/Source/Core/Common/MemArena.h b/Source/Core/Common/MemArena.h
index 59e62c0..a2efafa 100644
--- a/Source/Core/Common/MemArena.h
+++ b/Source/Core/Common/MemArena.h
@@ -4,6 +4,8 @@
 
 #pragma once
 
+#include <cstddef>
+
 #ifdef _WIN32
 #include <windows.h>
 #endif
diff --git a/Source/Core/Common/MemoryUtil.cpp b/Source/Core/Common/MemoryUtil.cpp
index e65f0a1..cc6d569 100644
--- a/Source/Core/Common/MemoryUtil.cpp
+++ b/Source/Core/Common/MemoryUtil.cpp
@@ -2,17 +2,19 @@
 // Licensed under GPLv2
 // Refer to the license.txt file included.
 
+#include <cstddef>
+#include <cstdlib>
+#include <string>
 
 #include "Common/Common.h"
-#include "Common/MemoryUtil.h"
-#include "Common/StringUtil.h"
 
 #ifdef _WIN32
 #include <windows.h>
 #include <psapi.h>
+#include "Common/StringUtil.h"
 #else
-#include <errno.h>
 #include <stdio.h>
+#include <sys/mman.h>
 #endif
 
 #if !defined(_WIN32) && defined(__x86_64__) && !defined(MAP_32BIT)
diff --git a/Source/Core/Common/MemoryUtil.h b/Source/Core/Common/MemoryUtil.h
index 4655c78..6f437fc 100644
--- a/Source/Core/Common/MemoryUtil.h
+++ b/Source/Core/Common/MemoryUtil.h
@@ -4,12 +4,9 @@
 
 #pragma once
 
+#include <cstddef>
 #include <string>
 
-#ifndef _WIN32
-#include <sys/mman.h>
-#endif
-
 void* AllocateExecutableMemory(size_t size, bool low = true);
 void* AllocateMemoryPages(size_t size);
 void FreeMemoryPages(void* ptr, size_t size);
diff --git a/Source/Core/Common/Misc.cpp b/Source/Core/Common/Misc.cpp
index 71a140c..fdc1114 100644
--- a/Source/Core/Common/Misc.cpp
+++ b/Source/Core/Common/Misc.cpp
@@ -2,7 +2,9 @@
 // Licensed under GPLv2
 // Refer to the license.txt file included.
 
-#include "Common/Common.h"
+#include <cstddef>
+#include <cstring>
+#include <errno.h>
 
 // Neither Android nor OS X support TLS
 #if  defined(__APPLE__) || (ANDROID && __clang__)
diff --git a/Source/Core/Common/MsgHandler.cpp b/Source/Core/Common/MsgHandler.cpp
index bbfa10d..cfeb656 100644
--- a/Source/Core/Common/MsgHandler.cpp
+++ b/Source/Core/Common/MsgHandler.cpp
@@ -2,7 +2,9 @@
 // Licensed under GPLv2
 // Refer to the license.txt file included.
 
+#include <cstdarg>
 #include <cstdio>
+#include <string>
 
 #include "Common/Common.h"
 #include "Common/StringUtil.h"
diff --git a/Source/Core/Common/NandPaths.cpp b/Source/Core/Common/NandPaths.cpp
index b4e89a5..03b5fa0 100644
--- a/Source/Core/Common/NandPaths.cpp
+++ b/Source/Core/Common/NandPaths.cpp
@@ -2,11 +2,15 @@
 // Licensed under GPLv2
 // Refer to the license.txt file included.
 
+#include <cstdio>
 #include <fstream>
+#include <string>
+#include <utility>
 
-#include "Common/CommonPaths.h"
+#include "Common/Common.h"
 #include "Common/FileUtil.h"
 #include "Common/NandPaths.h"
+#include "Common/StringUtil.h"
 
 namespace Common
 {
diff --git a/Source/Core/Common/NandPaths.h b/Source/Core/Common/NandPaths.h
index cdaf1a7..bf5ebc4 100644
--- a/Source/Core/Common/NandPaths.h
+++ b/Source/Core/Common/NandPaths.h
@@ -5,6 +5,9 @@
 #pragma once
 
 #include <string>
+#include <utility>
+#include <vector>
+
 #include "Common/CommonTypes.h"
 
 #define TITLEID_SYSMENU 0x0000000100000002ull
diff --git a/Source/Core/Common/SDCardUtil.cpp b/Source/Core/Common/SDCardUtil.cpp
index e73aa26..7f3d21a 100644
--- a/Source/Core/Common/SDCardUtil.cpp
+++ b/Source/Core/Common/SDCardUtil.cpp
@@ -29,12 +29,12 @@
 // Modified for Dolphin.
 
 #include <cinttypes>
+#include <cstddef>
 #include <cstdio>
-#include <cstdlib>
 #include <cstring>
 #include <ctime>
-#include <errno.h>
 
+#include "Common/Common.h"
 #include "Common/FileUtil.h"
 #include "Common/SDCardUtil.h"
 
diff --git a/Source/Core/Common/SettingsHandler.cpp b/Source/Core/Common/SettingsHandler.cpp
index b7a7aee..21cabaf 100644
--- a/Source/Core/Common/SettingsHandler.cpp
+++ b/Source/Core/Common/SettingsHandler.cpp
@@ -4,17 +4,20 @@
 
 // Thanks to Treeki for writing the original class - 29/01/2012
 
+#include <cstddef>
+#include <cstdio>
+#include <cstring>
 #include <ctime>
+#include <string>
 
 #ifdef _WIN32
 #include <mmsystem.h>
 #include <sys/timeb.h>
 #include <windows.h>
-#else
-#include <sys/time.h>
+#include "Common/CommonFuncs.h" // snprintf
 #endif
 
-#include "Common/CommonPaths.h"
+#include "Common/CommonTypes.h"
 #include "Common/SettingsHandler.h"
 #include "Common/Timer.h"
 
diff --git a/Source/Core/Common/StdConditionVariable.h b/Source/Core/Common/StdConditionVariable.h
index 2f537d1..810b15c 100644
--- a/Source/Core/Common/StdConditionVariable.h
+++ b/Source/Core/Common/StdConditionVariable.h
@@ -14,7 +14,7 @@
 #if GCC_VERSION >= GCC_VER(4,4,0) && __GXX_EXPERIMENTAL_CXX0X__
 
 // GCC 4.4 provides <condition_variable>
-#include <condition_variable>
+#include <condition_variable> // IWYU pragma: export
 
 #elif __has_include(<condition_variable>) && !ANDROID
 
@@ -23,14 +23,12 @@
 //
 // We work around this issue by undefining and redefining _.
 
-#undef _
-#include <condition_variable>
-#define _(s) wxGetTranslation((s))
+#include <condition_variable> // IWYU pragma: export
 
 #elif _MSC_VER >= 1700
 
 // The standard implementation is included since VS2012
-#include <condition_variable>
+#include <condition_variable> // IWYU pragma: export
 
 #else
 
diff --git a/Source/Core/Common/StdMutex.h b/Source/Core/Common/StdMutex.h
index 365aa7f..904743d 100644
--- a/Source/Core/Common/StdMutex.h
+++ b/Source/Core/Common/StdMutex.h
@@ -13,15 +13,15 @@
 
 #if GCC_VERSION >= GCC_VER(4,4,0) && __GXX_EXPERIMENTAL_CXX0X__
 // GCC 4.4 provides <mutex>
-#include <mutex>
+#include <mutex> // IWYU pragma: export
 #elif __has_include(<mutex>) && !ANDROID
 // Clang + libc++
-#include <mutex>
+#include <mutex> // IWYU pragma: export
 
 #elif _MSC_VER >= 1700
 
 // The standard implementation is included since VS2012
-#include <mutex>
+#include <mutex> // IWYU pragma: export
 
 #else
 
diff --git a/Source/Core/Common/StdThread.h b/Source/Core/Common/StdThread.h
index 7f02eeb..8b8357f 100644
--- a/Source/Core/Common/StdThread.h
+++ b/Source/Core/Common/StdThread.h
@@ -16,15 +16,15 @@
 #ifndef _GLIBCXX_USE_SCHED_YIELD
 #define _GLIBCXX_USE_SCHED_YIELD
 #endif
-#include <thread>
+#include <thread> // IWYU pragma: export
 #elif __has_include(<thread>) && !ANDROID
 // Clang + libc++
-#include <thread>
+#include <thread> // IWYU pragma: export
 
 #elif _MSC_VER >= 1700
 
 // The standard implementation is included since VS2012
-#include <thread>
+#include <thread> // IWYU pragma: export
 
 #else
 
diff --git a/Source/Core/Common/StringUtil.cpp b/Source/Core/Common/StringUtil.cpp
index 3031669..7f7ce5d 100644
--- a/Source/Core/Common/StringUtil.cpp
+++ b/Source/Core/Common/StringUtil.cpp
@@ -3,9 +3,18 @@
 // Refer to the license.txt file included.
 
 #include <algorithm>
+#include <cstdarg>
+#include <cstddef>
 #include <cstdio>
 #include <cstdlib>
-
+#include <cstring>
+#include <iomanip>
+#include <istream>
+#include <limits.h>
+#include <string>
+#include <vector>
+
+#include "Common/Common.h"
 #include "Common/CommonPaths.h"
 #include "Common/StringUtil.h"
 
diff --git a/Source/Core/Common/StringUtil.h b/Source/Core/Common/StringUtil.h
index 31e20e3..397a289 100644
--- a/Source/Core/Common/StringUtil.h
+++ b/Source/Core/Common/StringUtil.h
@@ -5,6 +5,7 @@
 #pragma once
 
 #include <cstdarg>
+#include <cstddef>
 #include <iomanip>
 #include <sstream>
 #include <string>
diff --git a/Source/Core/Common/SymbolDB.cpp b/Source/Core/Common/SymbolDB.cpp
index b44922f..d708df2 100644
--- a/Source/Core/Common/SymbolDB.cpp
+++ b/Source/Core/Common/SymbolDB.cpp
@@ -2,8 +2,13 @@
 // Licensed under GPLv2
 // Refer to the license.txt file included.
 
-#include "Common/SymbolDB.h"
+#include <cstring>
+#include <map>
+#include <string>
+#include <utility>
 
+#include "Common/Common.h"
+#include "Common/SymbolDB.h"
 
 void SymbolDB::List()
 {
diff --git a/Source/Core/Common/SymbolDB.h b/Source/Core/Common/SymbolDB.h
index 2166531..b30fd32 100644
--- a/Source/Core/Common/SymbolDB.h
+++ b/Source/Core/Common/SymbolDB.h
@@ -9,6 +9,7 @@
 
 #include <map>
 #include <string>
+#include <utility>
 #include <vector>
 
 #include "Common/Common.h"
diff --git a/Source/Core/Common/SysConf.cpp b/Source/Core/Common/SysConf.cpp
index cb634b2..a352b43 100644
--- a/Source/Core/Common/SysConf.cpp
+++ b/Source/Core/Common/SysConf.cpp
@@ -3,7 +3,12 @@
 // Refer to the license.txt file included.
 
 #include <cinttypes>
+#include <cstdio>
+#include <cstring>
+#include <string>
+#include <vector>
 
+#include "Common/Common.h"
 #include "Common/FileUtil.h"
 #include "Common/SysConf.h"
 
diff --git a/Source/Core/Common/SysConf.h b/Source/Core/Common/SysConf.h
index 0594a9d..3c2f81b 100644
--- a/Source/Core/Common/SysConf.h
+++ b/Source/Core/Common/SysConf.h
@@ -4,6 +4,8 @@
 
 #pragma once
 
+#include <cstdio>
+#include <cstring>
 #include <string>
 #include <vector>
 
diff --git a/Source/Core/Common/Timer.cpp b/Source/Core/Common/Timer.cpp
index 1670e86..b1e52bb 100644
--- a/Source/Core/Common/Timer.cpp
+++ b/Source/Core/Common/Timer.cpp
@@ -4,6 +4,7 @@
 
 #include <cinttypes>
 #include <ctime>
+#include <string>
 
 #ifdef _WIN32
 #include <mmsystem.h>
@@ -13,6 +14,7 @@
 #include <sys/time.h>
 #endif
 
+#include "Common/CommonTypes.h"
 #include "Common/StringUtil.h"
 #include "Common/Timer.h"
 
diff --git a/Source/Core/Common/x64ABI.cpp b/Source/Core/Common/x64ABI.cpp
index ce7ce5d..ecbbfa0 100644
--- a/Source/Core/Common/x64ABI.cpp
+++ b/Source/Core/Common/x64ABI.cpp
@@ -2,6 +2,7 @@
 // Licensed under GPLv2
 // Refer to the license.txt file included.
 
+#include "Common/Common.h"
 #include "Common/x64ABI.h"
 #include "Common/x64Emitter.h"
 
diff --git a/Source/Core/Common/x64ABI.h b/Source/Core/Common/x64ABI.h
index 75ca8fe..ed98419 100644
--- a/Source/Core/Common/x64ABI.h
+++ b/Source/Core/Common/x64ABI.h
@@ -4,7 +4,7 @@
 
 #pragma once
 
-#include "Common/Common.h"
+#include "Common/x64Emitter.h"
 
 // x86/x64 ABI:s, and helpers to help follow them when JIT-ing code.
 // All convensions return values in EAX (+ possibly EDX).
diff --git a/Source/Core/Common/x64CPUDetect.cpp b/Source/Core/Common/x64CPUDetect.cpp
index f9a5160..5ce1775 100644
--- a/Source/Core/Common/x64CPUDetect.cpp
+++ b/Source/Core/Common/x64CPUDetect.cpp
@@ -2,11 +2,11 @@
 // Licensed under GPLv2
 // Refer to the license.txt file included.
 
-#include <memory>
+#include <cstring>
+#include <string>
 
 #include "Common/Common.h"
 #include "Common/CPUDetect.h"
-#include "Common/StringUtil.h"
 
 #ifdef _WIN32
 #define _interlockedbittestandset workaround_ms_header_bug_platform_sdk6_set
diff --git a/Source/Core/Common/x64Emitter.cpp b/Source/Core/Common/x64Emitter.cpp
index fa6c42c..a4743e2 100644
--- a/Source/Core/Common/x64Emitter.cpp
+++ b/Source/Core/Common/x64Emitter.cpp
@@ -6,7 +6,6 @@
 
 #include "Common/Common.h"
 #include "Common/CPUDetect.h"
-#include "Common/x64ABI.h"
 #include "Common/x64Emitter.h"
 
 namespace Gen
diff --git a/Source/Core/Common/x64Emitter.h b/Source/Core/Common/x64Emitter.h
index 52db3c2..43d28eb 100644
--- a/Source/Core/Common/x64Emitter.h
+++ b/Source/Core/Common/x64Emitter.h
@@ -6,6 +6,9 @@
 
 #pragma once
 
+#include <cstddef>
+#include <cstring>
+
 #include "Common/Common.h"
 #include "Common/MemoryUtil.h"
 
diff --git a/Source/Core/Common/x64FPURoundMode.cpp b/Source/Core/Common/x64FPURoundMode.cpp
index ae061cb..f3da4a0 100644
--- a/Source/Core/Common/x64FPURoundMode.cpp
+++ b/Source/Core/Common/x64FPURoundMode.cpp
@@ -4,7 +4,6 @@
 
 #include "Common/Common.h"
 #include "Common/CPUDetect.h"
-#include "Common/FPURoundMode.h"
 
 #ifndef _WIN32
 static const unsigned short FPU_ROUND_NEAR = 0 << 10;
diff --git a/Source/Core/Core/Boot/Boot_WiiWAD.cpp b/Source/Core/Core/Boot/Boot_WiiWAD.cpp
index 99235c8..68eb396 100644
--- a/Source/Core/Core/Boot/Boot_WiiWAD.cpp
+++ b/Source/Core/Core/Boot/Boot_WiiWAD.cpp
@@ -6,6 +6,7 @@
 
 #include "Common/CommonPaths.h"
 #include "Common/FileUtil.h"
+#include "Common/NandPaths.h"
 
 #include "Core/ConfigManager.h"
 #include "Core/PatchEngine.h"
diff --git a/Source/Core/Core/IPC_HLE/WII_IPC_HLE_Device.h b/Source/Core/Core/IPC_HLE/WII_IPC_HLE_Device.h
index d5888e9..8b46845 100644
--- a/Source/Core/Core/IPC_HLE/WII_IPC_HLE_Device.h
+++ b/Source/Core/Core/IPC_HLE/WII_IPC_HLE_Device.h
@@ -8,6 +8,7 @@
 #include <string>
 
 #include "Common/ChunkFile.h"
+#include "Common/StringUtil.h"
 
 #include "Core/HW/Memmap.h"
 
diff --git a/Source/Core/Core/IPC_HLE/WII_IPC_HLE_Device_net.cpp b/Source/Core/Core/IPC_HLE/WII_IPC_HLE_Device_net.cpp
index 4bcccd8..a9e4fd6 100644
--- a/Source/Core/Core/IPC_HLE/WII_IPC_HLE_Device_net.cpp
+++ b/Source/Core/Core/IPC_HLE/WII_IPC_HLE_Device_net.cpp
@@ -7,6 +7,7 @@
 
 #include "Common/CommonPaths.h"
 #include "Common/FileUtil.h"
+#include "Common/NandPaths.h"
 #include "Common/SettingsHandler.h"
 #include "Common/StringUtil.h"
 
diff --git a/Source/Core/Core/PowerPC/PowerPC.cpp b/Source/Core/Core/PowerPC/PowerPC.cpp
index bf03584..324d6cc 100644
--- a/Source/Core/Core/PowerPC/PowerPC.cpp
+++ b/Source/Core/Core/PowerPC/PowerPC.cpp
@@ -5,6 +5,7 @@
 #include "Common/Atomic.h"
 #include "Common/ChunkFile.h"
 #include "Common/Common.h"
+#include "Common/FPURoundMode.h"
 #include "Common/MathUtil.h"
 
 #include "Core/Core.h"
diff --git a/Source/Core/DiscIO/BannerLoader.cpp b/Source/Core/DiscIO/BannerLoader.cpp
index d0c59c5..49dfb4b 100644
--- a/Source/Core/DiscIO/BannerLoader.cpp
+++ b/Source/Core/DiscIO/BannerLoader.cpp
@@ -2,16 +2,20 @@
 // Licensed under GPLv2
 // Refer to the license.txt file included.
 
-#include "Common/FileUtil.h"
+#include <cstddef>
 
 #include "DiscIO/BannerLoader.h"
 #include "DiscIO/BannerLoaderGC.h"
 #include "DiscIO/BannerLoaderWii.h"
+#include "DiscIO/Filesystem.h"
 #include "DiscIO/VolumeCreator.h"
 
 namespace DiscIO
 {
 
+class IBannerLoader;
+class IVolume;
+
 IBannerLoader* CreateBannerLoader(DiscIO::IFileSystem& _rFileSystem, DiscIO::IVolume *pVolume)
 {
 	if (IsVolumeWiiDisc(pVolume) || IsVolumeWadFile(pVolume))
diff --git a/Source/Core/DiscIO/BannerLoader.h b/Source/Core/DiscIO/BannerLoader.h
index d291f7f..74ed934 100644
--- a/Source/Core/DiscIO/BannerLoader.h
+++ b/Source/Core/DiscIO/BannerLoader.h
@@ -7,10 +7,14 @@
 #include <string>
 #include <vector>
 
-#include "DiscIO/Filesystem.h"
+#include "Common/CommonTypes.h"
 
 namespace DiscIO
 {
+
+class IFileSystem;
+class IVolume;
+
 class IBannerLoader
 {
 	public:
@@ -33,4 +37,5 @@ class IBannerLoader
 };
 
 IBannerLoader* CreateBannerLoader(DiscIO::IFileSystem& _rFileSystem, DiscIO::IVolume *pVolume);
-} // namespace
+
+}  // namespace DiscIO
diff --git a/Source/Core/DiscIO/BannerLoaderGC.cpp b/Source/Core/DiscIO/BannerLoaderGC.cpp
index bc6ba34..0133e43 100644
--- a/Source/Core/DiscIO/BannerLoaderGC.cpp
+++ b/Source/Core/DiscIO/BannerLoaderGC.cpp
@@ -2,9 +2,16 @@
 // Licensed under GPLv2
 // Refer to the license.txt file included.
 
+#include <cstddef>
+#include <string>
+#include <vector>
+
 #include "Common/ColorUtil.h"
-#include "Common/CommonTypes.h"
+#include "Common/Common.h"
+
 #include "DiscIO/BannerLoaderGC.h"
+#include "DiscIO/Filesystem.h"
+#include "DiscIO/Volume.h"
 
 namespace DiscIO
 {
diff --git a/Source/Core/DiscIO/BannerLoaderGC.h b/Source/Core/DiscIO/BannerLoaderGC.h
index d4d26d8..a583b3c 100644
--- a/Source/Core/DiscIO/BannerLoaderGC.h
+++ b/Source/Core/DiscIO/BannerLoaderGC.h
@@ -4,13 +4,21 @@
 
 #pragma once
 
-#include "Common/StringUtil.h"
+#include <cstring>
+#include <string>
+#include <vector>
+
+#include "Common/CommonTypes.h"
 
 #include "DiscIO/BannerLoader.h"
+#include "DiscIO/Volume.h"
 #include "DiscIO/VolumeGC.h"
 
 namespace DiscIO
 {
+
+class IFileSystem;
+
 class CBannerLoaderGC
 	: public IBannerLoader
 {
diff --git a/Source/Core/DiscIO/BannerLoaderWii.cpp b/Source/Core/DiscIO/BannerLoaderWii.cpp
index a037a83..3fa9113 100644
--- a/Source/Core/DiscIO/BannerLoaderWii.cpp
+++ b/Source/Core/DiscIO/BannerLoaderWii.cpp
@@ -3,15 +3,19 @@
 // Refer to the license.txt file included.
 
 #include <algorithm>
+#include <cstddef>
 #include <cstdio>
+#include <string>
+#include <vector>
 
 #include "Common/ColorUtil.h"
+#include "Common/CommonFuncs.h"
 #include "Common/CommonTypes.h"
 #include "Common/FileUtil.h"
+#include "Common/StringUtil.h"
 
 #include "DiscIO/BannerLoaderWii.h"
-#include "DiscIO/FileHandlerARC.h"
-#include "DiscIO/VolumeCreator.h"
+#include "DiscIO/Volume.h"
 
 namespace DiscIO
 {
diff --git a/Source/Core/DiscIO/BannerLoaderWii.h b/Source/Core/DiscIO/BannerLoaderWii.h
index 45cbb13..a43084e 100644
--- a/Source/Core/DiscIO/BannerLoaderWii.h
+++ b/Source/Core/DiscIO/BannerLoaderWii.h
@@ -4,10 +4,17 @@
 
 #pragma once
 
+#include <string>
+#include <vector>
+
+#include "Common/CommonTypes.h"
 #include "DiscIO/BannerLoader.h"
 
 namespace DiscIO
 {
+
+class IVolume;
+
 class CBannerLoaderWii
 	: public IBannerLoader
 {
@@ -60,4 +67,5 @@ class CBannerLoaderWii
 
 		bool GetStringFromComments(const CommentIndex index, std::string& s);
 };
+
 } // namespace
diff --git a/Source/Core/DiscIO/Blob.cpp b/Source/Core/DiscIO/Blob.cpp
index f8a831d..6e00b42 100644
--- a/Source/Core/DiscIO/Blob.cpp
+++ b/Source/Core/DiscIO/Blob.cpp
@@ -2,7 +2,12 @@
 // Licensed under GPLv2
 // Refer to the license.txt file included.
 
+#include <cstddef>
+#include <cstring>
+#include <string>
+
 #include "Common/CDUtils.h"
+#include "Common/CommonTypes.h"
 #include "Common/FileUtil.h"
 
 #include "DiscIO/Blob.h"
diff --git a/Source/Core/DiscIO/CISOBlob.cpp b/Source/Core/DiscIO/CISOBlob.cpp
index 4bf97ae..7c56cde 100644
--- a/Source/Core/DiscIO/CISOBlob.cpp
+++ b/Source/Core/DiscIO/CISOBlob.cpp
@@ -3,9 +3,10 @@
 // Refer to the license.txt file included.
 
 #include <algorithm>
-#include <cmath>
+#include <cstdio>
 
-#include "DiscIO/Blob.h"
+#include "Common/CommonTypes.h"
+#include "Common/FileUtil.h"
 #include "DiscIO/CISOBlob.h"
 
 namespace DiscIO
diff --git a/Source/Core/DiscIO/CISOBlob.h b/Source/Core/DiscIO/CISOBlob.h
index 26f2a84..dd95092 100644
--- a/Source/Core/DiscIO/CISOBlob.h
+++ b/Source/Core/DiscIO/CISOBlob.h
@@ -4,6 +4,9 @@
 
 #pragma once
 
+#include <cstdio>
+
+#include "Common/CommonTypes.h"
 #include "Common/FileUtil.h"
 #include "DiscIO/Blob.h"
 
diff --git a/Source/Core/DiscIO/CompressedBlob.cpp b/Source/Core/DiscIO/CompressedBlob.cpp
index f3dd250..94d56b3 100644
--- a/Source/Core/DiscIO/CompressedBlob.cpp
+++ b/Source/Core/DiscIO/CompressedBlob.cpp
@@ -5,15 +5,19 @@
 #ifdef _WIN32
 #include <io.h>
 #include <windows.h>
-#else
-#include <unistd.h>
 #endif
 
+#include <algorithm>
 #include <cinttypes>
+#include <cstdio>
+#include <cstring>
+#include <string>
 #include <zlib.h>
 
+#include "Common/Common.h"
 #include "Common/FileUtil.h"
 #include "Common/Hash.h"
+#include "DiscIO/Blob.h"
 #include "DiscIO/CompressedBlob.h"
 #include "DiscIO/DiscScrubber.h"
 
diff --git a/Source/Core/DiscIO/CompressedBlob.h b/Source/Core/DiscIO/CompressedBlob.h
index a170239..990deb4 100644
--- a/Source/Core/DiscIO/CompressedBlob.h
+++ b/Source/Core/DiscIO/CompressedBlob.h
@@ -16,6 +16,7 @@
 
 #include <string>
 
+#include "Common/CommonTypes.h"
 #include "Common/FileUtil.h"
 #include "DiscIO/Blob.h"
 
diff --git a/Source/Core/DiscIO/DiscScrubber.cpp b/Source/Core/DiscIO/DiscScrubber.cpp
index b127498..8c64dcd 100644
--- a/Source/Core/DiscIO/DiscScrubber.cpp
+++ b/Source/Core/DiscIO/DiscScrubber.cpp
@@ -2,11 +2,18 @@
 // Licensed under GPLv2
 // Refer to the license.txt file included.
 
+#include <algorithm>
 #include <cinttypes>
+#include <cstddef>
+#include <cstdio>
+#include <string>
+#include <vector>
 
+#include "Common/Common.h"
 #include "Common/FileUtil.h"
 #include "DiscIO/DiscScrubber.h"
 #include "DiscIO/Filesystem.h"
+#include "DiscIO/Volume.h"
 #include "DiscIO/VolumeCreator.h"
 
 namespace DiscIO
diff --git a/Source/Core/DiscIO/DiscScrubber.h b/Source/Core/DiscIO/DiscScrubber.h
index 5b29fda..4a75911 100644
--- a/Source/Core/DiscIO/DiscScrubber.h
+++ b/Source/Core/DiscIO/DiscScrubber.h
@@ -14,8 +14,8 @@
 #pragma once
 
 #include "Common/CommonTypes.h"
-#include "DiscIO/Blob.h"
 
+namespace File { class IOFile; }
 
 namespace DiscIO
 {
diff --git a/Source/Core/DiscIO/DriveBlob.cpp b/Source/Core/DiscIO/DriveBlob.cpp
index ad0a72a..819a379 100644
--- a/Source/Core/DiscIO/DriveBlob.cpp
+++ b/Source/Core/DiscIO/DriveBlob.cpp
@@ -2,9 +2,18 @@
 // Licensed under GPLv2
 // Refer to the license.txt file included.
 
-#include "Common/StringUtil.h"
+#include <cstdio>
+#include <cstring>
+
+#include "Common/Common.h"
+#include "Common/FileUtil.h"
+#include "DiscIO/Blob.h"
 #include "DiscIO/DriveBlob.h"
 
+#ifdef _WIN32
+#include "Common/StringUtil.h"
+#endif
+
 namespace DiscIO
 {
 
diff --git a/Source/Core/DiscIO/DriveBlob.h b/Source/Core/DiscIO/DriveBlob.h
index 1e70859..8baedaf 100644
--- a/Source/Core/DiscIO/DriveBlob.h
+++ b/Source/Core/DiscIO/DriveBlob.h
@@ -4,6 +4,7 @@
 
 #pragma once
 
+#include "Common/CommonTypes.h"
 #include "Common/FileUtil.h"
 #include "DiscIO/Blob.h"
 
diff --git a/Source/Core/DiscIO/FileBlob.h b/Source/Core/DiscIO/FileBlob.h
index cafa074..170cda3 100644
--- a/Source/Core/DiscIO/FileBlob.h
+++ b/Source/Core/DiscIO/FileBlob.h
@@ -4,6 +4,9 @@
 
 #pragma once
 
+#include <cstdio>
+
+#include "Common/CommonTypes.h"
 #include "Common/FileUtil.h"
 #include "DiscIO/Blob.h"
 
diff --git a/Source/Core/DiscIO/FileHandlerARC.cpp b/Source/Core/DiscIO/FileHandlerARC.cpp
index 8e820e6..770d3aa 100644
--- a/Source/Core/DiscIO/FileHandlerARC.cpp
+++ b/Source/Core/DiscIO/FileHandlerARC.cpp
@@ -2,10 +2,16 @@
 // Licensed under GPLv2
 // Refer to the license.txt file included.
 
+#include <cstddef>
+#include <cstdio>
+#include <cstring>
+#include <string>
+
+#include "Common/Common.h"
 #include "Common/FileUtil.h"
-#include "Common/StringUtil.h"
 #include "DiscIO/Blob.h"
 #include "DiscIO/FileHandlerARC.h"
+#include "DiscIO/Filesystem.h"
 
 #define ARC_ID 0x55aa382d
 
diff --git a/Source/Core/DiscIO/FileHandlerARC.h b/Source/Core/DiscIO/FileHandlerARC.h
index 23ff978..1fccd5f 100644
--- a/Source/Core/DiscIO/FileHandlerARC.h
+++ b/Source/Core/DiscIO/FileHandlerARC.h
@@ -4,6 +4,7 @@
 
 #pragma once
 
+#include <cstddef>
 #include <string>
 #include <vector>
 
diff --git a/Source/Core/DiscIO/FileMonitor.cpp b/Source/Core/DiscIO/FileMonitor.cpp
index bae2f49..94d0189 100644
--- a/Source/Core/DiscIO/FileMonitor.cpp
+++ b/Source/Core/DiscIO/FileMonitor.cpp
@@ -3,18 +3,21 @@
 // Refer to the license.txt file included.
 
 #include <algorithm>
-#include <iostream>
+#include <cctype>
+#include <cstring>
 #include <string>
 #include <vector>
 
 #include "Common/Common.h"
-#include "Common/IniFile.h"
 #include "Common/LogManager.h"
+#include "Common/StringUtil.h"
 
 #include "Core/ConfigManager.h"
 #include "Core/Core.h"
+#include "Core/Boot/Boot.h"
 
-#include "DiscIO/FileSystemGCWii.h"
+#include "DiscIO/Filesystem.h"
+#include "DiscIO/Volume.h"
 #include "DiscIO/VolumeCreator.h"
 
 namespace FileMon
diff --git a/Source/Core/DiscIO/FileMonitor.h b/Source/Core/DiscIO/FileMonitor.h
index 2ce4af3..f5e92f0 100644
--- a/Source/Core/DiscIO/FileMonitor.h
+++ b/Source/Core/DiscIO/FileMonitor.h
@@ -4,10 +4,9 @@
 
 #pragma once
 
-#include <iostream> // System: For std
-
-#include "Common/Common.h" // Common: For u64
+#include <string>
 
+#include "Common/CommonTypes.h"
 
 namespace FileMon
 {
diff --git a/Source/Core/DiscIO/FileSystemGCWii.cpp b/Source/Core/DiscIO/FileSystemGCWii.cpp
index 078fb55..6b15454 100644
--- a/Source/Core/DiscIO/FileSystemGCWii.cpp
+++ b/Source/Core/DiscIO/FileSystemGCWii.cpp
@@ -4,6 +4,8 @@
 
 #include <algorithm>
 #include <cinttypes>
+#include <cstddef>
+#include <cstring>
 #include <string>
 #include <vector>
 
@@ -11,7 +13,9 @@
 #include "Common/FileUtil.h"
 #include "Common/StringUtil.h"
 
+#include "DiscIO/Filesystem.h"
 #include "DiscIO/FileSystemGCWii.h"
+#include "DiscIO/Volume.h"
 
 namespace DiscIO
 {
diff --git a/Source/Core/DiscIO/FileSystemGCWii.h b/Source/Core/DiscIO/FileSystemGCWii.h
index 7444711..1fe934a 100644
--- a/Source/Core/DiscIO/FileSystemGCWii.h
+++ b/Source/Core/DiscIO/FileSystemGCWii.h
@@ -4,13 +4,18 @@
 
 #pragma once
 
+#include <cstddef>
+#include <string>
 #include <vector>
 
+#include "Common/CommonTypes.h"
 #include "DiscIO/Filesystem.h"
 
 namespace DiscIO
 {
 
+class IVolume;
+
 class CFileSystemGCWii : public IFileSystem
 {
 public:
diff --git a/Source/Core/DiscIO/Filesystem.cpp b/Source/Core/DiscIO/Filesystem.cpp
index fc07bae..7cbfa9c 100644
--- a/Source/Core/DiscIO/Filesystem.cpp
+++ b/Source/Core/DiscIO/Filesystem.cpp
@@ -4,7 +4,6 @@
 
 #include "DiscIO/Filesystem.h"
 #include "DiscIO/FileSystemGCWii.h"
-#include "DiscIO/VolumeCreator.h"
 
 namespace DiscIO
 {
diff --git a/Source/Core/DiscIO/Filesystem.h b/Source/Core/DiscIO/Filesystem.h
index b67f0d4..af51c4c 100644
--- a/Source/Core/DiscIO/Filesystem.h
+++ b/Source/Core/DiscIO/Filesystem.h
@@ -4,11 +4,17 @@
 
 #pragma once
 
-#include "DiscIO/Volume.h"
+#include <cstddef>
+#include <cstring>
+#include <vector>
+
+#include "Common/CommonTypes.h"
 
 namespace DiscIO
 {
 
+class IVolume;
+
 // file info of an FST entry
 struct SFileInfo
 {
diff --git a/Source/Core/DiscIO/NANDContentLoader.cpp b/Source/Core/DiscIO/NANDContentLoader.cpp
index 35d51a5..1e3be46 100644
--- a/Source/Core/DiscIO/NANDContentLoader.cpp
+++ b/Source/Core/DiscIO/NANDContentLoader.cpp
@@ -2,16 +2,25 @@
 // Licensed under GPLv2
 // Refer to the license.txt file included.
 
-#include <algorithm>
-#include <cctype>
+#include <cstddef>
+#include <cstdio>
+#include <cstring>
+#include <functional>
+#include <map>
+#include <string>
+#include <utility>
+#include <vector>
 #include <polarssl/aes.h>
 
+#include "Common/Common.h"
 #include "Common/FileUtil.h"
 #include "Common/Log.h"
 #include "Common/MathUtil.h"
+#include "Common/NandPaths.h"
 #include "Common/StringUtil.h"
 
 #include "DiscIO/NANDContentLoader.h"
+#include "DiscIO/Volume.h"
 #include "DiscIO/WiiWad.h"
 
 namespace DiscIO
diff --git a/Source/Core/DiscIO/NANDContentLoader.h b/Source/Core/DiscIO/NANDContentLoader.h
index bff9297..456f592 100644
--- a/Source/Core/DiscIO/NANDContentLoader.h
+++ b/Source/Core/DiscIO/NANDContentLoader.h
@@ -4,15 +4,12 @@
 
 #pragma once
 
+#include <cstddef>
 #include <map>
 #include <string>
 #include <vector>
 
 #include "Common/Common.h"
-#include "Common/FileUtil.h"
-#include "Common/NandPaths.h"
-
-#include "DiscIO/Blob.h"
 #include "DiscIO/Volume.h"
 
 namespace DiscIO
diff --git a/Source/Core/DiscIO/Volume.h b/Source/Core/DiscIO/Volume.h
index 5343a9f..648ffea 100644
--- a/Source/Core/DiscIO/Volume.h
+++ b/Source/Core/DiscIO/Volume.h
@@ -8,7 +8,6 @@
 #include <vector>
 
 #include "Common/Common.h"
-#include "Common/StringUtil.h"
 
 namespace DiscIO
 {
diff --git a/Source/Core/DiscIO/VolumeCommon.cpp b/Source/Core/DiscIO/VolumeCommon.cpp
index af367c7..7a19d9f 100644
--- a/Source/Core/DiscIO/VolumeCommon.cpp
+++ b/Source/Core/DiscIO/VolumeCommon.cpp
@@ -2,6 +2,10 @@
 // Licensed under GPLv2
 // Refer to the license.txt file included.
 
+#include <string>
+#include <vector>
+
+#include "Common/Common.h"
 #include "DiscIO/Volume.h"
 
 namespace DiscIO
diff --git a/Source/Core/DiscIO/VolumeCreator.cpp b/Source/Core/DiscIO/VolumeCreator.cpp
index 74d4a5d..1a36e6a 100644
--- a/Source/Core/DiscIO/VolumeCreator.cpp
+++ b/Source/Core/DiscIO/VolumeCreator.cpp
@@ -2,15 +2,18 @@
 // Licensed under GPLv2
 // Refer to the license.txt file included.
 
+#include <cstddef>
+#include <cstring>
+#include <string>
 #include <vector>
 
 #include <polarssl/aes.h>
 
-#include "Common/Hash.h"
+#include "Common/Common.h"
 #include "Common/StringUtil.h"
 
+#include "DiscIO/Blob.h"
 #include "DiscIO/Volume.h"
-#include "DiscIO/VolumeCreator.h"
 #include "DiscIO/VolumeDirectory.h"
 #include "DiscIO/VolumeGC.h"
 #include "DiscIO/VolumeWad.h"
diff --git a/Source/Core/DiscIO/VolumeCreator.h b/Source/Core/DiscIO/VolumeCreator.h
index a9f1e43..e37db0b 100644
--- a/Source/Core/DiscIO/VolumeCreator.h
+++ b/Source/Core/DiscIO/VolumeCreator.h
@@ -4,12 +4,18 @@
 
 #pragma once
 
-#include "DiscIO/Volume.h"
+#include <string>
+
+#include "Common/CommonTypes.h"
 
 namespace DiscIO
 {
+
+class IVolume;
+
 IVolume* CreateVolumeFromFilename(const std::string& _rFilename, u32 _PartitionGroup = 0, u32 _VolumeNum = -1);
 IVolume* CreateVolumeFromDirectory(const std::string& _rDirectory, bool _bIsWii, const std::string& _rApploader = "", const std::string& _rDOL = "");
 bool IsVolumeWiiDisc(const IVolume *_rVolume);
 bool IsVolumeWadFile(const IVolume *_rVolume);
+
 } // namespace
diff --git a/Source/Core/DiscIO/VolumeDirectory.cpp b/Source/Core/DiscIO/VolumeDirectory.cpp
index eeaa5fe..50a380a 100644
--- a/Source/Core/DiscIO/VolumeDirectory.cpp
+++ b/Source/Core/DiscIO/VolumeDirectory.cpp
@@ -2,10 +2,20 @@
 // Licensed under GPLv2
 // Refer to the license.txt file included.
 
+#include <algorithm>
+#include <cstddef>
+#include <cstring>
+#include <map>
+#include <string>
+#include <utility>
+#include <vector>
+
+#include "Common/Common.h"
 #include "Common/CommonPaths.h"
+#include "Common/FileUtil.h"
 #include "Common/MathUtil.h"
-
 #include "DiscIO/FileBlob.h"
+#include "DiscIO/Volume.h"
 #include "DiscIO/VolumeDirectory.h"
 
 namespace DiscIO
diff --git a/Source/Core/DiscIO/VolumeDirectory.h b/Source/Core/DiscIO/VolumeDirectory.h
index 4f9a47f..ec1527c 100644
--- a/Source/Core/DiscIO/VolumeDirectory.h
+++ b/Source/Core/DiscIO/VolumeDirectory.h
@@ -6,10 +6,13 @@
 
 #include <map>
 #include <string>
+#include <vector>
 
-#include "Common/FileUtil.h"
+#include "Common/CommonTypes.h"
 #include "DiscIO/Volume.h"
 
+namespace File { struct FSTEntry; }
+
 //
 // --- this volume type is used for reading files directly from the hard drive ---
 //
diff --git a/Source/Core/DiscIO/VolumeGC.cpp b/Source/Core/DiscIO/VolumeGC.cpp
index 8039d56..4e057df 100644
--- a/Source/Core/DiscIO/VolumeGC.cpp
+++ b/Source/Core/DiscIO/VolumeGC.cpp
@@ -2,8 +2,15 @@
 // Licensed under GPLv2
 // Refer to the license.txt file included.
 
+#include <cstddef>
+#include <string>
+#include <vector>
+
+#include "Common/Common.h"
 #include "Common/StringUtil.h"
+#include "DiscIO/Blob.h"
 #include "DiscIO/FileMonitor.h"
+#include "DiscIO/Volume.h"
 #include "DiscIO/VolumeGC.h"
 
 namespace DiscIO
diff --git a/Source/Core/DiscIO/VolumeGC.h b/Source/Core/DiscIO/VolumeGC.h
index 42b7524..d48ccbc 100644
--- a/Source/Core/DiscIO/VolumeGC.h
+++ b/Source/Core/DiscIO/VolumeGC.h
@@ -4,13 +4,19 @@
 
 #pragma once
 
-#include "DiscIO/Blob.h"
+#include <string>
+#include <vector>
+
+#include "Common/CommonTypes.h"
 #include "DiscIO/Volume.h"
 
 // --- this volume type is used for GC disc images ---
 
 namespace DiscIO
 {
+
+class IBlobReader;
+
 class CVolumeGC : public IVolume
 {
 public:
diff --git a/Source/Core/DiscIO/VolumeWad.cpp b/Source/Core/DiscIO/VolumeWad.cpp
index d436c99..0174f95 100644
--- a/Source/Core/DiscIO/VolumeWad.cpp
+++ b/Source/Core/DiscIO/VolumeWad.cpp
@@ -3,10 +3,15 @@
 // Refer to the license.txt file included.
 
 #include <algorithm>
-#include <cmath>
+#include <cstddef>
+#include <string>
+#include <vector>
 
+#include "Common/Common.h"
 #include "Common/MathUtil.h"
 #include "Common/StringUtil.h"
+#include "DiscIO/Blob.h"
+#include "DiscIO/Volume.h"
 #include "DiscIO/VolumeWad.h"
 
 #define ALIGN_40(x) ROUND_UP(Common::swap32(x), 0x40)
diff --git a/Source/Core/DiscIO/VolumeWad.h b/Source/Core/DiscIO/VolumeWad.h
index 7ae0068..dcfb03f 100644
--- a/Source/Core/DiscIO/VolumeWad.h
+++ b/Source/Core/DiscIO/VolumeWad.h
@@ -4,8 +4,10 @@
 
 #pragma once
 
-#include "DiscIO/Blob.h"
-#include "DiscIO/NANDContentLoader.h"
+#include <string>
+#include <vector>
+
+#include "Common/CommonTypes.h"
 #include "DiscIO/Volume.h"
 
 // --- this volume type is used for Wad files ---
@@ -14,6 +16,9 @@
 
 namespace DiscIO
 {
+
+class IBlobReader;
+
 class CVolumeWAD : public IVolume
 {
 public:
diff --git a/Source/Core/DiscIO/VolumeWiiCrypted.cpp b/Source/Core/DiscIO/VolumeWiiCrypted.cpp
index 69b7869..76d507d 100644
--- a/Source/Core/DiscIO/VolumeWiiCrypted.cpp
+++ b/Source/Core/DiscIO/VolumeWiiCrypted.cpp
@@ -2,9 +2,16 @@
 // Licensed under GPLv2
 // Refer to the license.txt file included.
 
+#include <cstddef>
+#include <cstring>
+#include <string>
+#include <vector>
+#include <polarssl/aes.h>
 #include <polarssl/sha1.h>
 
-#include "Common/StringUtil.h"
+#include "Common/Common.h"
+#include "DiscIO/Blob.h"
+#include "DiscIO/Volume.h"
 #include "DiscIO/VolumeGC.h"
 #include "DiscIO/VolumeWiiCrypted.h"
 
diff --git a/Source/Core/DiscIO/VolumeWiiCrypted.h b/Source/Core/DiscIO/VolumeWiiCrypted.h
index 51033b1..e364045 100644
--- a/Source/Core/DiscIO/VolumeWiiCrypted.h
+++ b/Source/Core/DiscIO/VolumeWiiCrypted.h
@@ -4,15 +4,20 @@
 
 #pragma once
 
+#include <string>
+#include <vector>
 #include <polarssl/aes.h>
 
-#include "DiscIO/Blob.h"
+#include "Common/CommonTypes.h"
 #include "DiscIO/Volume.h"
 
 // --- this volume type is used for encrypted Wii images ---
 
 namespace DiscIO
 {
+
+class IBlobReader;
+
 class CVolumeWiiCrypted : public IVolume
 {
 public:
diff --git a/Source/Core/DiscIO/WbfsBlob.cpp b/Source/Core/DiscIO/WbfsBlob.cpp
index a13e268..b51c14a 100644
--- a/Source/Core/DiscIO/WbfsBlob.cpp
+++ b/Source/Core/DiscIO/WbfsBlob.cpp
@@ -2,6 +2,13 @@
 // Licensed under GPLv2
 // Refer to the license.txt file included.
 
+#include <algorithm>
+#include <cstdio>
+#include <cstring>
+#include <string>
+#include <vector>
+
+#include "Common/Common.h"
 #include "Common/FileUtil.h"
 #include "DiscIO/WbfsBlob.h"
 
diff --git a/Source/Core/DiscIO/WbfsBlob.h b/Source/Core/DiscIO/WbfsBlob.h
index 83ac436..639843d 100644
--- a/Source/Core/DiscIO/WbfsBlob.h
+++ b/Source/Core/DiscIO/WbfsBlob.h
@@ -4,14 +4,15 @@
 
 #pragma once
 
+#include <vector>
+
+#include "Common/CommonTypes.h"
 #include "Common/FileUtil.h"
 #include "DiscIO/Blob.h"
 
 namespace DiscIO
 {
 
-struct wbfs_head_t;
-
 class WbfsFileReader : public IBlobReader
 {
 	WbfsFileReader(const char* filename);
diff --git a/Source/Core/DiscIO/WiiWad.cpp b/Source/Core/DiscIO/WiiWad.cpp
index 8c6cda7..4ca2944 100644
--- a/Source/Core/DiscIO/WiiWad.cpp
+++ b/Source/Core/DiscIO/WiiWad.cpp
@@ -3,13 +3,14 @@
 // Refer to the license.txt file included.
 
 
-#include <algorithm>
-#include <cctype>
+#include <cstddef>
+#include <string>
 
+#include "Common/Common.h"
 #include "Common/FileUtil.h"
 #include "Common/Log.h"
 #include "Common/MathUtil.h"
-#include "DiscIO/NANDContentLoader.h"
+#include "DiscIO/Blob.h"
 #include "DiscIO/WiiWad.h"
 
 namespace DiscIO
diff --git a/Source/Core/DiscIO/WiiWad.h b/Source/Core/DiscIO/WiiWad.h
index b72f616..a987bce 100644
--- a/Source/Core/DiscIO/WiiWad.h
+++ b/Source/Core/DiscIO/WiiWad.h
@@ -4,17 +4,15 @@
 
 #pragma once
 
-#include <map>
 #include <string>
-#include <vector>
 
 #include "Common/CommonTypes.h"
-#include "DiscIO/Blob.h"
-#include "DiscIO/Volume.h"
 
 namespace DiscIO
 {
 
+class IBlobReader;
+
 class WiiWAD
 {
 public:
diff --git a/Source/Core/DolphinWX/ARCodeAddEdit.cpp b/Source/Core/DolphinWX/ARCodeAddEdit.cpp
index 0143e15..d810ba1 100644
--- a/Source/Core/DolphinWX/ARCodeAddEdit.cpp
+++ b/Source/Core/DolphinWX/ARCodeAddEdit.cpp
@@ -2,10 +2,33 @@
 // Licensed under GPLv2
 // Refer to the license.txt file included.
 
+#include <cstddef>
+#include <cstdlib>
+#include <string>
+#include <vector>
+#include <wx/chartype.h>
+#include <wx/defs.h>
+#include <wx/dialog.h>
+#include <wx/event.h>
+#include <wx/gdicmn.h>
+#include <wx/gbsizer.h>
+#include <wx/sizer.h>
+#include <wx/spinbutt.h>
+#include <wx/stattext.h>
+#include <wx/string.h>
+#include <wx/textctrl.h>
+#include <wx/translation.h>
+#include <wx/windowid.h>
+
+#include "Common/Common.h"
+#include "Common/StringUtil.h"
+#include "Core/ActionReplay.h"
 #include "Core/ARDecrypt.h"
 #include "DolphinWX/ARCodeAddEdit.h"
 #include "DolphinWX/WxUtils.h"
 
+class wxWindow;
+
 extern std::vector<ActionReplay::ARCode> arCodes;
 
 BEGIN_EVENT_TABLE(CARCodeAddEdit, wxDialog)
diff --git a/Source/Core/DolphinWX/ARCodeAddEdit.h b/Source/Core/DolphinWX/ARCodeAddEdit.h
index 9f22a0c..d2ebbe5 100644
--- a/Source/Core/DolphinWX/ARCodeAddEdit.h
+++ b/Source/Core/DolphinWX/ARCodeAddEdit.h
@@ -4,10 +4,19 @@
 
 #pragma once
 
-#include <wx/spinctrl.h>
-#include <wx/wx.h>
-
-#include "DolphinWX/ISOProperties.h"
+#include <wx/dialog.h>
+#include <wx/event.h>
+#include <wx/gdicmn.h>
+#include <wx/string.h>
+#include <wx/translation.h>
+#include <wx/windowid.h>
+
+class wxSpinButton;
+class wxSpinEvent;
+class wxTextCtrl;
+class wxWindow;
+
+namespace ActionReplay { struct ARCode; }
 
 class CARCodeAddEdit : public wxDialog
 {
diff --git a/Source/Core/DolphinWX/AboutDolphin.cpp b/Source/Core/DolphinWX/AboutDolphin.cpp
index c17c219..470baea 100644
--- a/Source/Core/DolphinWX/AboutDolphin.cpp
+++ b/Source/Core/DolphinWX/AboutDolphin.cpp
@@ -2,11 +2,25 @@
 // Licensed under GPLv2
 // Refer to the license.txt file included.
 
+#include <wx/bitmap.h>
+#include <wx/defs.h>
+#include <wx/dialog.h>
+#include <wx/gdicmn.h>
+#include <wx/image.h>
+#include <wx/mstream.h>
+#include <wx/sizer.h>
+#include <wx/statbmp.h>
+#include <wx/stattext.h>
+#include <wx/string.h>
+#include <wx/translation.h>
+#include <wx/windowid.h>
+
 #include "Common/Common.h"
 #include "DolphinWX/AboutDolphin.h"
-#include "DolphinWX/WxUtils.h"
 #include "DolphinWX/resources/dolphin_logo.cpp"
 
+class wxWindow;
+
 AboutDolphin::AboutDolphin(wxWindow *parent, wxWindowID id,
 		const wxString &title, const wxPoint &position,
 		const wxSize& size, long style)
diff --git a/Source/Core/DolphinWX/AboutDolphin.h b/Source/Core/DolphinWX/AboutDolphin.h
index 4c1f430..5ea8b91 100644
--- a/Source/Core/DolphinWX/AboutDolphin.h
+++ b/Source/Core/DolphinWX/AboutDolphin.h
@@ -4,13 +4,14 @@
 
 #pragma once
 
-#include <wx/button.h>
+#include <wx/defs.h>
 #include <wx/dialog.h>
-#include <wx/mstream.h>
-#include <wx/statbmp.h>
-#include <wx/statbox.h>
-#include <wx/stattext.h>
-#include <wx/wx.h>
+#include <wx/gdicmn.h>
+#include <wx/string.h>
+#include <wx/translation.h>
+#include <wx/windowid.h>
+
+class wxWindow;
 
 class AboutDolphin : public wxDialog
 {
diff --git a/Source/Core/DolphinWX/Android/ButtonManager.h b/Source/Core/DolphinWX/Android/ButtonManager.h
index f56157d..54d403a 100644
--- a/Source/Core/DolphinWX/Android/ButtonManager.h
+++ b/Source/Core/DolphinWX/Android/ButtonManager.h
@@ -6,8 +6,6 @@
 
 #include <map>
 #include <string>
-#include "Common/CommonPaths.h"
-#include "VideoCommon/VideoBackendBase.h"
 
 namespace ButtonManager
 {
diff --git a/Source/Core/DolphinWX/CheatsWindow.cpp b/Source/Core/DolphinWX/CheatsWindow.cpp
index 398b981..4318fb9 100644
--- a/Source/Core/DolphinWX/CheatsWindow.cpp
+++ b/Source/Core/DolphinWX/CheatsWindow.cpp
@@ -2,18 +2,50 @@
 // Licensed under GPLv2
 // Refer to the license.txt file included.
 
-#include "Common/CommonPaths.h"
+#include <climits>
+#include <cstddef>
+#include <cstdio>
+#include <cstring>
+#include <string>
+#include <vector>
+#include <wx/button.h>
+#include <wx/chartype.h>
+#include <wx/checkbox.h>
+#include <wx/checklst.h>
+#include <wx/choice.h>
+#include <wx/defs.h>
+#include <wx/dialog.h>
+#include <wx/event.h>
+#include <wx/gdicmn.h>
+#include <wx/listbox.h>
+#include <wx/notebook.h>
+#include <wx/panel.h>
+#include <wx/radiobut.h>
+#include <wx/sizer.h>
+#include <wx/statbox.h>
+#include <wx/stattext.h>
+#include <wx/string.h>
+#include <wx/textctrl.h>
+#include <wx/toplevel.h>
+#include <wx/translation.h>
+#include <wx/validate.h>
+
+#include "Common/Common.h"
+#include "Common/IniFile.h"
 #include "Core/ActionReplay.h"
 #include "Core/ConfigManager.h"
 #include "Core/Core.h"
-#include "Core/VolumeHandler.h"
+#include "Core/CoreParameter.h"
+#include "Core/GeckoCode.h"
+#include "Core/GeckoCodeConfig.h"
 #include "Core/HW/Memmap.h"
 #include "DolphinWX/CheatsWindow.h"
 #include "DolphinWX/Frame.h"
-#include "DolphinWX/Globals.h"
+#include "DolphinWX/GeckoCodeDiag.h"
 #include "DolphinWX/ISOProperties.h"
 #include "DolphinWX/WxUtils.h"
 
+class wxWindow;
 
 #define MAX_CHEAT_SEARCH_RESULTS_DISPLAY  256
 extern std::vector<ActionReplay::ARCode> arCodes;
diff --git a/Source/Core/DolphinWX/CheatsWindow.h b/Source/Core/DolphinWX/CheatsWindow.h
index d7823a9..7a82822 100644
--- a/Source/Core/DolphinWX/CheatsWindow.h
+++ b/Source/Core/DolphinWX/CheatsWindow.h
@@ -4,25 +4,32 @@
 
 #pragma once
 
+#include <cstddef>
 #include <string>
 #include <vector>
-#include <wx/colour.h>
-#include <wx/filepicker.h>
-#include <wx/gbsizer.h>
-#include <wx/imaglist.h>
-#include <wx/listbox.h>
-#include <wx/mimetype.h>
-#include <wx/notebook.h>
-#include <wx/sizer.h>
-#include <wx/statbmp.h>
-#include <wx/textctrl.h>
-#include <wx/treectrl.h>
-#include <wx/wx.h>
+#include <wx/arrstr.h>
+#include <wx/dialog.h>
+#include <wx/panel.h>
 
+#include "Common/CommonTypes.h"
 #include "Common/IniFile.h"
-#include "Core/ActionReplay.h"
-#include "DiscIO/Filesystem.h"
-#include "DolphinWX/GeckoCodeDiag.h"
+
+class wxButton;
+class wxCheckBox;
+class wxCheckListBox;
+class wxChoice;
+class wxCloseEvent;
+class wxCommandEvent;
+class wxEvent;
+class wxListBox;
+class wxNotebook;
+class wxRadioButton;
+class wxStaticBox;
+class wxStaticText;
+class wxTextCtrl;
+class wxWindow;
+
+namespace Gecko { class CodeConfigPanel; }
 
 class CreateCodeDialog : public wxDialog
 {
diff --git a/Source/Core/DolphinWX/ConfigMain.cpp b/Source/Core/DolphinWX/ConfigMain.cpp
index 62e41de..716a47b 100644
--- a/Source/Core/DolphinWX/ConfigMain.cpp
+++ b/Source/Core/DolphinWX/ConfigMain.cpp
@@ -6,7 +6,22 @@
 #include <functional>
 #include <string>
 #include <vector>
+
+#include <wx/checkbox.h>
+#include <wx/choice.h>
+#include <wx/filepicker.h>
+#include <wx/gbsizer.h>
+#include <wx/listbox.h>
+#include <wx/menu.h>
+#include <wx/msgdlg.h>
+#include <wx/notebook.h>
+#include <wx/panel.h>
+#include <wx/radiobox.h>
+#include <wx/sizer.h>
+#include <wx/slider.h>
 #include <wx/spinbutt.h>
+#include <wx/spinctrl.h>
+#include <wx/stattext.h>
 
 #include "Common/Common.h"
 #include "Common/CommonPaths.h"
@@ -15,6 +30,7 @@
 
 #include "Core/ConfigManager.h"
 #include "Core/Core.h"
+#include "Core/Movie.h"
 #include "Core/NetPlayProto.h"
 #include "Core/HW/EXI.h"
 #include "Core/HW/GCMemcard.h"
@@ -31,6 +47,7 @@
 #include "DolphinWX/HotkeyDlg.h"
 #include "DolphinWX/Main.h"
 #include "DolphinWX/WxUtils.h"
+#include "DolphinWX/Debugger/CodeWindow.h"
 
 #include "VideoCommon/VideoBackendBase.h"
 
diff --git a/Source/Core/DolphinWX/ConfigMain.h b/Source/Core/DolphinWX/ConfigMain.h
index 9aafeed..5ae0aeb 100644
--- a/Source/Core/DolphinWX/ConfigMain.h
+++ b/Source/Core/DolphinWX/ConfigMain.h
@@ -4,18 +4,42 @@
 
 #pragma once
 
-#include <wx/filepicker.h>
-#include <wx/gbsizer.h>
-#include <wx/notebook.h>
-#include <wx/spinbutt.h>
-#include <wx/spinctrl.h>
-#include <wx/wx.h>
-
-#include "Core/ConfigManager.h"
+#include <cstdio>
+#include <string>
+
+#include <wx/arrstr.h>
+#include <wx/defs.h>
+#include <wx/dialog.h>
+#include <wx/event.h>
+#include <wx/gdicmn.h>
+#include <wx/string.h>
+#include <wx/translation.h>
+#include <wx/windowid.h>
+
+#include "Common/CommonTypes.h"
 #if defined(HAVE_XRANDR) && HAVE_XRANDR
 #include "DolphinWX/X11Utils.h"
 #endif
 
+class wxBoxSizer;
+class wxButton;
+class wxCheckBox;
+class wxChoice;
+class wxDirPickerCtrl;
+class wxFileDirPickerEvent;
+class wxFilePickerCtrl;
+class wxGridBagSizer;
+class wxListBox;
+class wxNotebook;
+class wxPanel;
+class wxRadioBox;
+class wxSlider;
+class wxSpinCtrl;
+class wxSpinEvent;
+class wxStaticBoxSizer;
+class wxStaticText;
+class wxWindow;
+
 class CConfigMain : public wxDialog
 {
 public:
diff --git a/Source/Core/DolphinWX/Debugger/BreakpointDlg.cpp b/Source/Core/DolphinWX/Debugger/BreakpointDlg.cpp
index 047464e..120bb76 100644
--- a/Source/Core/DolphinWX/Debugger/BreakpointDlg.cpp
+++ b/Source/Core/DolphinWX/Debugger/BreakpointDlg.cpp
@@ -2,6 +2,18 @@
 // Licensed under GPLv2
 // Refer to the license.txt file included.
 
+#include <string>
+#include <wx/chartype.h>
+#include <wx/defs.h>
+#include <wx/dialog.h>
+#include <wx/event.h>
+#include <wx/gdicmn.h>
+#include <wx/sizer.h>
+#include <wx/string.h>
+#include <wx/textctrl.h>
+
+#include "Common/BreakPoints.h"
+#include "Common/Common.h"
 #include "Common/StringUtil.h"
 #include "Core/PowerPC/PowerPC.h"
 #include "DolphinWX/WxUtils.h"
diff --git a/Source/Core/DolphinWX/Debugger/BreakpointDlg.h b/Source/Core/DolphinWX/Debugger/BreakpointDlg.h
index 3699fc9..7e4312a 100644
--- a/Source/Core/DolphinWX/Debugger/BreakpointDlg.h
+++ b/Source/Core/DolphinWX/Debugger/BreakpointDlg.h
@@ -4,9 +4,11 @@
 
 #pragma once
 
-#include <wx/wx.h>
+#include <wx/dialog.h>
+#include <wx/event.h>
 
 class CBreakPointWindow;
+class wxTextCtrl;
 
 class BreakPointDlg : public wxDialog
 {
diff --git a/Source/Core/DolphinWX/Debugger/BreakpointView.cpp b/Source/Core/DolphinWX/Debugger/BreakpointView.cpp
index 4934122..1f5ed38 100644
--- a/Source/Core/DolphinWX/Debugger/BreakpointView.cpp
+++ b/Source/Core/DolphinWX/Debugger/BreakpointView.cpp
@@ -2,16 +2,28 @@
 // Licensed under GPLv2
 // Refer to the license.txt file included.
 
-#include <wx/wx.h>
-
-#include "Core/Debugger/Debugger_SymbolMap.h"
-#include "Core/HW/Memmap.h"
+#include <cstddef>
+#include <cstdio>
+
+#include <wx/chartype.h>
+#include <wx/defs.h>
+#include <wx/gdicmn.h>
+#include <wx/listbase.h>
+#include <wx/listctrl.h>
+#include <wx/string.h>
+#include <wx/windowid.h>
+
+#include "Common/BreakPoints.h"
+#include "Common/CommonTypes.h"
 #include "Core/PowerPC/PowerPC.h"
 #include "Core/PowerPC/PPCSymbolDB.h"
 #include "DolphinWX/WxUtils.h"
 #include "DolphinWX/Debugger/BreakpointView.h"
 #include "DolphinWX/Debugger/DebuggerUIUtil.h"
 
+class wxWindow;
+struct Symbol;
+
 CBreakPointView::CBreakPointView(wxWindow* parent, const wxWindowID id)
 	: wxListCtrl(parent, id, wxDefaultPosition, wxDefaultSize,
 			wxLC_REPORT | wxSUNKEN_BORDER | wxLC_ALIGN_LEFT | wxLC_SINGLE_SEL | wxLC_SORT_ASCENDING)
diff --git a/Source/Core/DolphinWX/Debugger/BreakpointView.h b/Source/Core/DolphinWX/Debugger/BreakpointView.h
index e53eacd..74dd636 100644
--- a/Source/Core/DolphinWX/Debugger/BreakpointView.h
+++ b/Source/Core/DolphinWX/Debugger/BreakpointView.h
@@ -5,8 +5,9 @@
 #pragma once
 
 #include <wx/listctrl.h>
+#include <wx/windowid.h>
 
-#include "Common/Common.h"
+class wxWindow;
 
 class CBreakPointView : public wxListCtrl
 {
diff --git a/Source/Core/DolphinWX/Debugger/BreakpointWindow.cpp b/Source/Core/DolphinWX/Debugger/BreakpointWindow.cpp
index 8afc73f..b16f150 100644
--- a/Source/Core/DolphinWX/Debugger/BreakpointWindow.cpp
+++ b/Source/Core/DolphinWX/Debugger/BreakpointWindow.cpp
@@ -2,9 +2,26 @@
 // Licensed under GPLv2
 // Refer to the license.txt file included.
 
+#include <wx/bitmap.h>
+#include <wx/chartype.h>
+#include <wx/defs.h>
+#include <wx/event.h>
+#include <wx/gdicmn.h>
+#include <wx/image.h>
+#include <wx/listbase.h>
+#include <wx/panel.h>
+#include <wx/string.h>
+#include <wx/windowid.h>
+#include <wx/aui/auibar.h>
+#include <wx/aui/framemanager.h>
+
+#include "Common/BreakPoints.h"
+#include "Common/CommonTypes.h"
 #include "Common/FileUtil.h"
+#include "Common/IniFile.h"
 #include "Core/HW/Memmap.h"
 #include "Core/PowerPC/PowerPC.h"
+#include "DolphinWX/WxUtils.h"
 #include "DolphinWX/Debugger/BreakpointDlg.h"
 #include "DolphinWX/Debugger/BreakpointView.h"
 #include "DolphinWX/Debugger/BreakpointWindow.h"
@@ -17,6 +34,8 @@ extern "C" {
 #include "DolphinWX/resources/toolbar_debugger_delete.c"
 }
 
+class wxWindow;
+
 class CBreakPointBar : public wxAuiToolBar
 {
 public:
diff --git a/Source/Core/DolphinWX/Debugger/BreakpointWindow.h b/Source/Core/DolphinWX/Debugger/BreakpointWindow.h
index 6e8235b..106ccea 100644
--- a/Source/Core/DolphinWX/Debugger/BreakpointWindow.h
+++ b/Source/Core/DolphinWX/Debugger/BreakpointWindow.h
@@ -4,12 +4,19 @@
 
 #pragma once
 
-#include <wx/listctrl.h>
-#include <wx/wx.h>
-#include <wx/aui/aui.h>
+#include <wx/chartype.h>
+#include <wx/defs.h>
+#include <wx/event.h>
+#include <wx/gdicmn.h>
+#include <wx/panel.h>
+#include <wx/string.h>
+#include <wx/windowid.h>
+#include <wx/aui/framemanager.h>
 
 class CBreakPointView;
 class CCodeWindow;
+class wxListEvent;
+class wxWindow;
 
 class CBreakPointWindow : public wxPanel
 {
diff --git a/Source/Core/DolphinWX/Debugger/CodeView.cpp b/Source/Core/DolphinWX/Debugger/CodeView.cpp
index 9dc5237..bd27777 100644
--- a/Source/Core/DolphinWX/Debugger/CodeView.cpp
+++ b/Source/Core/DolphinWX/Debugger/CodeView.cpp
@@ -2,9 +2,29 @@
 // Licensed under GPLv2
 // Refer to the license.txt file included.
 
+#include <cmath>
+#include <cstdio>
+#include <cstring>
+#include <string>
+#include <vector>
+#include <wx/brush.h>
+#include <wx/chartype.h>
 #include <wx/clipbrd.h>
+#include <wx/colour.h>
+#include <wx/control.h>
+#include <wx/dataobj.h>
+#include <wx/dcclient.h>
+#include <wx/defs.h>
 #include <wx/event.h>
+#include <wx/gdicmn.h>
+#include <wx/menu.h>
+#include <wx/menuitem.h>
+#include <wx/pen.h>
+#include <wx/setup.h>
+#include <wx/string.h>
 #include <wx/textdlg.h>
+#include <wx/translation.h>
+#include <wx/windowid.h>
 
 #include "Common/Common.h"
 #include "Common/DebugInterface.h"
diff --git a/Source/Core/DolphinWX/Debugger/CodeView.h b/Source/Core/DolphinWX/Debugger/CodeView.h
index 8d41e5e..fde58de 100644
--- a/Source/Core/DolphinWX/Debugger/CodeView.h
+++ b/Source/Core/DolphinWX/Debugger/CodeView.h
@@ -9,7 +9,10 @@
 
 #include <vector>
 
-#include <wx/wx.h>
+#include <wx/control.h>
+#include <wx/defs.h>
+#include <wx/event.h>
+#include <wx/windowid.h>
 
 #include "Common/Common.h"
 
@@ -17,6 +20,8 @@ DECLARE_EVENT_TYPE(wxEVT_CODEVIEW_CHANGE, -1);
 
 class DebugInterface;
 class SymbolDB;
+class wxPaintDC;
+class wxWindow;
 
 class CCodeView : public wxControl
 {
diff --git a/Source/Core/DolphinWX/Debugger/CodeWindow.cpp b/Source/Core/DolphinWX/Debugger/CodeWindow.cpp
index 8e58eaa..a5189fa 100644
--- a/Source/Core/DolphinWX/Debugger/CodeWindow.cpp
+++ b/Source/Core/DolphinWX/Debugger/CodeWindow.cpp
@@ -2,41 +2,62 @@
 // Licensed under GPLv2
 // Refer to the license.txt file included.
 
-#include <wx/wx.h>
-
+#include <cstdio>
+#include <string>
+#include <vector>
+#include <wx/bitmap.h>
+#include <wx/chartype.h>
+#include <wx/defs.h>
+#include <wx/event.h>
+#include <wx/gdicmn.h>
+#include <wx/image.h>
+#include <wx/listbox.h>
+#include <wx/menu.h>
+#include <wx/menuitem.h>
+#include <wx/panel.h>
+#include <wx/sizer.h>
+#include <wx/string.h>
+#include <wx/textctrl.h>
+#include <wx/textdlg.h>
+#include <wx/thread.h>
+#include <wx/translation.h>
+#include <wx/window.h>
+#include <wx/windowid.h>
+#include <wx/aui/auibar.h>
+
+#include "Common/BreakPoints.h"
 #include "Common/Common.h"
-#include "Common/FileUtil.h"
-#include "Common/LogManager.h"
-#include "Core/ConfigManager.h"
+#include "Common/StringUtil.h"
+#include "Common/SymbolDB.h"
 #include "Core/Core.h"
+#include "Core/CoreParameter.h"
 #include "Core/Host.h"
-#include "Core/Boot/Boot.h"
 #include "Core/Debugger/Debugger_SymbolMap.h"
 #include "Core/Debugger/PPCDebugInterface.h"
-#include "Core/HLE/HLE.h"
 #include "Core/HW/CPU.h"
 #include "Core/HW/Memmap.h"
+#include "Core/PowerPC/Gekko.h"
 #include "Core/PowerPC/JitInterface.h"
 #include "Core/PowerPC/PowerPC.h"
-#include "Core/PowerPC/PPCAnalyst.h"
 #include "Core/PowerPC/PPCSymbolDB.h"
 #include "Core/PowerPC/PPCTables.h"
-#include "Core/PowerPC/SignatureDB.h"
+#include "DolphinWX/Frame.h"
+#include "DolphinWX/Globals.h"
 #include "DolphinWX/WxUtils.h"
 #include "DolphinWX/Debugger/BreakpointWindow.h"
 #include "DolphinWX/Debugger/CodeView.h"
 #include "DolphinWX/Debugger/CodeWindow.h"
-#include "DolphinWX/Debugger/JitWindow.h"
-#include "DolphinWX/Debugger/MemoryWindow.h"
+#include "DolphinWX/Debugger/DebuggerUIUtil.h"
 #include "DolphinWX/Debugger/RegisterWindow.h"
 
-
 extern "C"  // Bitmaps
 {
 	#include "DolphinWX/resources/toolbar_add_memorycheck.c" // NOLINT
 	#include "DolphinWX/resources/toolbar_add_breakpoint.c" // NOLINT
 }
 
+class DebugInterface;
+
 // -------
 // Main
 
diff --git a/Source/Core/DolphinWX/Debugger/CodeWindow.h b/Source/Core/DolphinWX/Debugger/CodeWindow.h
index 1dd5287..8804a79 100644
--- a/Source/Core/DolphinWX/Debugger/CodeWindow.h
+++ b/Source/Core/DolphinWX/Debugger/CodeWindow.h
@@ -4,14 +4,17 @@
 
 #pragma once
 
-#include <wx/artprov.h>
-#include <wx/dialog.h>
-#include <wx/listbox.h>
-#include <wx/textctrl.h>
-
+#include <wx/bitmap.h>
+#include <wx/defs.h>
+#include <wx/event.h>
+#include <wx/gdicmn.h>
+#include <wx/panel.h>
+#include <wx/string.h>
+#include <wx/translation.h>
+#include <wx/windowid.h>
+
+#include "Common/CommonTypes.h"
 #include "Common/Thread.h"
-#include "Core/CoreParameter.h"
-#include "DolphinWX/Frame.h"
 #include "DolphinWX/Globals.h"
 
 class CFrame;
@@ -22,6 +25,12 @@ class CJitWindow;
 class CCodeView;
 class DSPDebuggerLLE;
 class GFXDebuggerPanel;
+struct SCoreStartupParameter;
+
+class wxAuiToolBar;
+class wxListBox;
+class wxMenu;
+class wxMenuBar;
 
 class CCodeWindow
 	: public wxPanel
diff --git a/Source/Core/DolphinWX/Debugger/CodeWindowFunctions.cpp b/Source/Core/DolphinWX/Debugger/CodeWindowFunctions.cpp
index 0de5320..d42d227 100644
--- a/Source/Core/DolphinWX/Debugger/CodeWindowFunctions.cpp
+++ b/Source/Core/DolphinWX/Debugger/CodeWindowFunctions.cpp
@@ -2,34 +2,48 @@
 // Licensed under GPLv2
 // Refer to the license.txt file included.
 
+#include <cstddef>
+#include <istream>
+#include <string>
+#include <utility>
+#include <vector>
+#include <wx/chartype.h>
+#include <wx/defs.h>
+#include <wx/event.h>
+#include <wx/filedlg.h>
+#include <wx/font.h>
+#include <wx/fontdata.h>
 #include <wx/fontdlg.h>
+#include <wx/listbox.h>
+#include <wx/menu.h>
+#include <wx/menuitem.h>
 #include <wx/mimetype.h>
+#include <wx/string.h>
+#include <wx/textdlg.h>
+#include <wx/translation.h>
+#include <wx/utils.h>
 
 #include "Common/Common.h"
 #include "Common/CommonPaths.h"
 #include "Common/FileUtil.h"
-#include "Common/LogManager.h"
+#include "Common/IniFile.h"
+#include "Common/SymbolDB.h"
 
-#include "Core/ConfigManager.h"
 #include "Core/Core.h"
 #include "Core/Host.h"
 #include "Core/Boot/Boot.h"
-#include "Core/Debugger/Debugger_SymbolMap.h"
-#include "Core/Debugger/PPCDebugInterface.h"
 #include "Core/HLE/HLE.h"
-#include "Core/HW/CPU.h"
 #include "Core/PowerPC/PowerPC.h"
 #include "Core/PowerPC/PPCAnalyst.h"
 #include "Core/PowerPC/PPCSymbolDB.h"
-#include "Core/PowerPC/PPCTables.h"
 #include "Core/PowerPC/Profiler.h"
 #include "Core/PowerPC/SignatureDB.h"
 #include "Core/PowerPC/JitCommon/JitBase.h"
-#include "Core/PowerPC/JitCommon/JitCache.h" // for ClearCache()
 
+#include "DolphinWX/Frame.h"
+#include "DolphinWX/Globals.h"
 #include "DolphinWX/WxUtils.h"
 #include "DolphinWX/Debugger/BreakpointWindow.h"
-#include "DolphinWX/Debugger/CodeView.h"
 #include "DolphinWX/Debugger/CodeWindow.h"
 #include "DolphinWX/Debugger/DebuggerPanel.h"
 #include "DolphinWX/Debugger/DebuggerUIUtil.h"
diff --git a/Source/Core/DolphinWX/Debugger/DSPDebugWindow.cpp b/Source/Core/DolphinWX/Debugger/DSPDebugWindow.cpp
index 681209c..b755af5 100644
--- a/Source/Core/DolphinWX/Debugger/DSPDebugWindow.cpp
+++ b/Source/Core/DolphinWX/Debugger/DSPDebugWindow.cpp
@@ -2,13 +2,29 @@
 // Licensed under GPLv2
 // Refer to the license.txt file included.
 
-#include <fstream>
-#include <iostream>
-#include <sstream>
+#include <cstdio>
 #include <wx/artprov.h>
+#include <wx/chartype.h>
+#include <wx/defs.h>
+#include <wx/event.h>
+#include <wx/gdicmn.h>
+#include <wx/listbox.h>
+#include <wx/panel.h>
+#include <wx/sizer.h>
+#include <wx/string.h>
+#include <wx/textctrl.h>
+#include <wx/thread.h>
+#include <wx/translation.h>
+#include <wx/windowid.h>
+#include <wx/aui/auibar.h>
+#include <wx/aui/auibook.h>
+#include <wx/aui/framemanager.h>
 
 #include "Common/Common.h"
 #include "Common/StringUtil.h"
+#include "Common/SymbolDB.h"
+#include "Core/DSP/DSPCore.h"
+#include "Core/HW/DSPLLE/DSPDebugInterface.h"
 #include "Core/HW/DSPLLE/DSPSymbols.h"
 #include "DolphinWX/WxUtils.h"
 #include "DolphinWX/Debugger/CodeView.h"
@@ -16,6 +32,8 @@
 #include "DolphinWX/Debugger/DSPRegisterView.h"
 #include "DolphinWX/Debugger/MemoryView.h"
 
+class wxWindow;
+
 DSPDebuggerLLE* m_DebuggerFrame = NULL;
 
 BEGIN_EVENT_TABLE(DSPDebuggerLLE, wxPanel)
diff --git a/Source/Core/DolphinWX/Debugger/DSPDebugWindow.h b/Source/Core/DolphinWX/Debugger/DSPDebugWindow.h
index e0bf61f..773a49a 100644
--- a/Source/Core/DolphinWX/Debugger/DSPDebugWindow.h
+++ b/Source/Core/DolphinWX/Debugger/DSPDebugWindow.h
@@ -4,30 +4,22 @@
 
 #pragma once
 
-// general things
-#include <algorithm>
-#include <iostream>
-#include <list>
-#include <map>
-#include <vector>
-#include <wx/button.h>
-#include <wx/frame.h>
-#include <wx/listctrl.h>
-#include <wx/sizer.h>
-#include <wx/statbox.h>
-#include <wx/statline.h>
-#include <wx/stattext.h>
-#include <wx/wx.h>
-#include <wx/aui/aui.h>
+#include <wx/defs.h>
+#include <wx/event.h>
+#include <wx/panel.h>
+#include <wx/windowid.h>
+#include <wx/aui/framemanager.h>
 
-#include "Core/DSP/disassemble.h"
-#include "Core/DSP/DSPInterpreter.h"
-#include "Core/DSP/DSPMemoryMap.h"
+#include "Common/CommonTypes.h"
 #include "Core/HW/DSPLLE/DSPDebugInterface.h"
 
 class DSPRegisterView;
 class CCodeView;
 class CMemoryView;
+class wxAuiNotebook;
+class wxAuiToolBar;
+class wxListBox;
+class wxWindow;
 
 class DSPDebuggerLLE : public wxPanel
 {
diff --git a/Source/Core/DolphinWX/Debugger/DSPRegisterView.cpp b/Source/Core/DolphinWX/Debugger/DSPRegisterView.cpp
index 8adbb32..5ef966b 100644
--- a/Source/Core/DolphinWX/Debugger/DSPRegisterView.cpp
+++ b/Source/Core/DolphinWX/Debugger/DSPRegisterView.cpp
@@ -2,10 +2,22 @@
 // Licensed under GPLv2
 // Refer to the license.txt file included.
 
+#include <wx/chartype.h>
+#include <wx/colour.h>
+#include <wx/defs.h>
+#include <wx/gdicmn.h>
+#include <wx/grid.h>
+#include <wx/string.h>
+#include <wx/windowid.h>
+
+#include "Common/CommonTypes.h"
+#include "Core/DSP/DSPCore.h"
+#include "Core/DSP/DSPTables.h"
 #include "DolphinWX/WxUtils.h"
-#include "DolphinWX/Debugger/DSPDebugWindow.h"
 #include "DolphinWX/Debugger/DSPRegisterView.h"
 
+class wxWindow;
+
 wxString CDSPRegTable::GetValue(int row, int col)
 {
 	if (row < 32) // 32 "normal" regs
diff --git a/Source/Core/DolphinWX/Debugger/DSPRegisterView.h b/Source/Core/DolphinWX/Debugger/DSPRegisterView.h
index 946a540..5f5a9b5 100644
--- a/Source/Core/DolphinWX/Debugger/DSPRegisterView.h
+++ b/Source/Core/DolphinWX/Debugger/DSPRegisterView.h
@@ -4,8 +4,15 @@
 
 #pragma once
 
+#include <cstring>
+#include <wx/defs.h>
 #include <wx/grid.h>
+#include <wx/string.h>
+#include <wx/windowid.h>
 
+#include "Common/CommonTypes.h"
+
+class wxWindow;
 
 class CDSPRegTable : public wxGridTableBase
 {
diff --git a/Source/Core/DolphinWX/Debugger/DebuggerPanel.cpp b/Source/Core/DolphinWX/Debugger/DebuggerPanel.cpp
index bc28c6c..16944ba 100644
--- a/Source/Core/DolphinWX/Debugger/DebuggerPanel.cpp
+++ b/Source/Core/DolphinWX/Debugger/DebuggerPanel.cpp
@@ -2,15 +2,32 @@
 // Licensed under GPLv2
 // Refer to the license.txt file included.
 
+#include <cstddef>
+#include <string>
+#include <wx/button.h>
+#include <wx/chartype.h>
+#include <wx/choice.h>
+#include <wx/defs.h>
+#include <wx/event.h>
+#include <wx/gdicmn.h>
+#include <wx/msgdlg.h>
+#include <wx/panel.h>
+#include <wx/sizer.h>
+#include <wx/string.h>
+#include <wx/textctrl.h>
+#include <wx/translation.h>
+#include <wx/validate.h>
+#include <wx/windowid.h>
+
 #include "Common/FileUtil.h"
 #include "Common/IniFile.h"
 #include "Core/ConfigManager.h"
+#include "Core/CoreParameter.h"
 #include "DolphinWX/Debugger/DebuggerPanel.h"
-#include "VideoCommon/NativeVertexFormat.h"
-#include "VideoCommon/PixelShaderGen.h"
+#include "VideoCommon/Debugger.h"
 #include "VideoCommon/TextureCacheBase.h"
-#include "VideoCommon/VertexShaderGen.h"
-#include "VideoCommon/VideoConfig.h"
+
+class wxWindow;
 
 BEGIN_EVENT_TABLE(GFXDebuggerPanel, wxPanel)
 	EVT_CLOSE(GFXDebuggerPanel::OnClose)
diff --git a/Source/Core/DolphinWX/Debugger/DebuggerPanel.h b/Source/Core/DolphinWX/Debugger/DebuggerPanel.h
index cdf5144..796f015 100644
--- a/Source/Core/DolphinWX/Debugger/DebuggerPanel.h
+++ b/Source/Core/DolphinWX/Debugger/DebuggerPanel.h
@@ -4,11 +4,21 @@
 
 #pragma once
 
-#include <wx/notebook.h>
-#include <wx/wx.h>
+#include <wx/defs.h>
+#include <wx/event.h>
+#include <wx/gdicmn.h>
+#include <wx/panel.h>
+#include <wx/string.h>
+#include <wx/translation.h>
+#include <wx/windowid.h>
 
 #include "VideoCommon/Debugger.h"
 
+class wxButton;
+class wxChoice;
+class wxTextCtrl;
+class wxWindow;
+
 class GFXDebuggerPanel : public wxPanel, public GFXDebuggerBase
 {
 public:
diff --git a/Source/Core/DolphinWX/Debugger/DebuggerUIUtil.cpp b/Source/Core/DolphinWX/Debugger/DebuggerUIUtil.cpp
index 406d239..37c1c26 100644
--- a/Source/Core/DolphinWX/Debugger/DebuggerUIUtil.cpp
+++ b/Source/Core/DolphinWX/Debugger/DebuggerUIUtil.cpp
@@ -2,6 +2,9 @@
 // Licensed under GPLv2
 // Refer to the license.txt file included.
 
+#include <wx/chartype.h>
+#include <wx/defs.h>
+#include <wx/font.h>
 
 #include "DolphinWX/Debugger/DebuggerUIUtil.h"
 
diff --git a/Source/Core/DolphinWX/Debugger/DebuggerUIUtil.h b/Source/Core/DolphinWX/Debugger/DebuggerUIUtil.h
index 783a1fd..5955579 100644
--- a/Source/Core/DolphinWX/Debugger/DebuggerUIUtil.h
+++ b/Source/Core/DolphinWX/Debugger/DebuggerUIUtil.h
@@ -4,6 +4,6 @@
 
 #pragma once
 
-#include <wx/wx.h>
+#include <wx/font.h>
 
 extern wxFont DebuggerFont;
diff --git a/Source/Core/DolphinWX/Debugger/JitWindow.cpp b/Source/Core/DolphinWX/Debugger/JitWindow.cpp
index 5e3511b..61810a0 100644
--- a/Source/Core/DolphinWX/Debugger/JitWindow.cpp
+++ b/Source/Core/DolphinWX/Debugger/JitWindow.cpp
@@ -2,20 +2,28 @@
 // Licensed under GPLv2
 // Refer to the license.txt file included.
 
+#include <cstdio>
+#include <cstring>
 #include <disasm.h>        // Bochs
 #include <PowerPCDisasm.h> // Bochs
 #include <wx/button.h>
+#include <wx/chartype.h>
+#include <wx/defs.h>
+#include <wx/event.h>
+#include <wx/gdicmn.h>
+#include <wx/listbase.h>
 #include <wx/listctrl.h>
+#include <wx/panel.h>
+#include <wx/sizer.h>
+#include <wx/string.h>
 #include <wx/textctrl.h>
-#include <wx/thread.h>
+#include <wx/translation.h>
+#include <wx/window.h>
+#include <wx/windowid.h>
 
-#include "Common/LogManager.h"
+#include "Common/Common.h"
 #include "Common/StringUtil.h"
-#include "Core/Core.h"
-#include "Core/Debugger/Debugger_SymbolMap.h"
-#include "Core/Debugger/PPCDebugInterface.h"
-#include "Core/HW/CPU.h"
-#include "Core/PowerPC/PowerPC.h"
+#include "Core/PowerPC/Gekko.h"
 #include "Core/PowerPC/PPCAnalyst.h"
 #include "Core/PowerPC/JitCommon/JitBase.h"
 #include "Core/PowerPC/JitCommon/JitCache.h"
diff --git a/Source/Core/DolphinWX/Debugger/JitWindow.h b/Source/Core/DolphinWX/Debugger/JitWindow.h
index 6eb0869..44a8a52 100644
--- a/Source/Core/DolphinWX/Debugger/JitWindow.h
+++ b/Source/Core/DolphinWX/Debugger/JitWindow.h
@@ -5,15 +5,21 @@
 #pragma once
 
 #include <vector>
-
-#include <wx/dialog.h>
-#include <wx/listbox.h>
+#include <wx/defs.h>
+#include <wx/event.h>
+#include <wx/gdicmn.h>
 #include <wx/listctrl.h>
-#include <wx/textctrl.h>
+#include <wx/panel.h>
+#include <wx/string.h>
+#include <wx/translation.h>
+#include <wx/windowid.h>
+
+#include "Common/CommonTypes.h"
 
-#include "Common/Thread.h"
-#include "Core/CoreParameter.h"
-#include "DolphinWX/Debugger/MemoryView.h"
+class wxButton;
+class wxListBox;
+class wxTextCtrl;
+class wxWindow;
 
 class JitBlockList : public wxListCtrl
 {
diff --git a/Source/Core/DolphinWX/Debugger/MemoryCheckDlg.cpp b/Source/Core/DolphinWX/Debugger/MemoryCheckDlg.cpp
index f8ed8ba..5408be8 100644
--- a/Source/Core/DolphinWX/Debugger/MemoryCheckDlg.cpp
+++ b/Source/Core/DolphinWX/Debugger/MemoryCheckDlg.cpp
@@ -2,6 +2,20 @@
 // Licensed under GPLv2
 // Refer to the license.txt file included.
 
+#include <string>
+#include <wx/chartype.h>
+#include <wx/checkbox.h>
+#include <wx/defs.h>
+#include <wx/dialog.h>
+#include <wx/event.h>
+#include <wx/gdicmn.h>
+#include <wx/sizer.h>
+#include <wx/stattext.h>
+#include <wx/string.h>
+#include <wx/textctrl.h>
+#include <wx/translation.h>
+
+#include "Common/BreakPoints.h"
 #include "Common/Common.h"
 #include "Common/StringUtil.h"
 #include "Core/PowerPC/PowerPC.h"
diff --git a/Source/Core/DolphinWX/Debugger/MemoryCheckDlg.h b/Source/Core/DolphinWX/Debugger/MemoryCheckDlg.h
index f53a90e..bb392db 100644
--- a/Source/Core/DolphinWX/Debugger/MemoryCheckDlg.h
+++ b/Source/Core/DolphinWX/Debugger/MemoryCheckDlg.h
@@ -4,9 +4,12 @@
 
 #pragma once
 
-#include <wx/wx.h>
+#include <wx/dialog.h>
+#include <wx/event.h>
 
 class CBreakPointWindow;
+class wxCheckBox;
+class wxTextCtrl;
 
 class MemoryCheckDlg : public wxDialog
 {
diff --git a/Source/Core/DolphinWX/Debugger/MemoryView.cpp b/Source/Core/DolphinWX/Debugger/MemoryView.cpp
index 832c13c..d39f672 100644
--- a/Source/Core/DolphinWX/Debugger/MemoryView.cpp
+++ b/Source/Core/DolphinWX/Debugger/MemoryView.cpp
@@ -2,13 +2,30 @@
 // Licensed under GPLv2
 // Refer to the license.txt file included.
 
+#include <cmath>
+#include <cstdio>
+#include <cstring>
+#include <string>
+#include <wx/brush.h>
+#include <wx/chartype.h>
 #include <wx/clipbrd.h>
+#include <wx/colour.h>
+#include <wx/control.h>
+#include <wx/dataobj.h>
+#include <wx/dcclient.h>
+#include <wx/defs.h>
 #include <wx/event.h>
+#include <wx/font.h>
+#include <wx/gdicmn.h>
+#include <wx/menu.h>
+#include <wx/pen.h>
+#include <wx/setup.h>
+#include <wx/string.h>
+#include <wx/window.h>
 
 #include "Common/Common.h"
+#include "Common/DebugInterface.h"
 #include "Core/Host.h"
-#include "Core/HW/Memmap.h"
-#include "Core/PowerPC/PowerPC.h"
 #include "DolphinWX/WxUtils.h"
 #include "DolphinWX/Debugger/DebuggerUIUtil.h"
 #include "DolphinWX/Debugger/MemoryView.h"
diff --git a/Source/Core/DolphinWX/Debugger/MemoryView.h b/Source/Core/DolphinWX/Debugger/MemoryView.h
index b018669..76cfb7d 100644
--- a/Source/Core/DolphinWX/Debugger/MemoryView.h
+++ b/Source/Core/DolphinWX/Debugger/MemoryView.h
@@ -4,9 +4,13 @@
 
 #pragma once
 
-#include "Common/Common.h"
-#include "Common/DebugInterface.h"
-#include "DolphinWX/Debugger/DebuggerUIUtil.h"
+#include <wx/control.h>
+#include <wx/event.h>
+
+#include "Common/CommonTypes.h"
+
+class DebugInterface;
+class wxWindow;
 
 class CMemoryView : public wxControl
 {
diff --git a/Source/Core/DolphinWX/Debugger/MemoryWindow.cpp b/Source/Core/DolphinWX/Debugger/MemoryWindow.cpp
index 516ab41..8d3cb58 100644
--- a/Source/Core/DolphinWX/Debugger/MemoryWindow.cpp
+++ b/Source/Core/DolphinWX/Debugger/MemoryWindow.cpp
@@ -2,25 +2,45 @@
 // Licensed under GPLv2
 // Refer to the license.txt file included.
 
+#include <cstddef>
+#include <cstdio>
+#include <cstring>
+#include <string>
+#include <vector>
 #include <wx/button.h>
-#include <wx/listctrl.h>
+#include <wx/chartype.h>
+#include <wx/checkbox.h>
+#include <wx/defs.h>
+#include <wx/event.h>
+#include <wx/gdicmn.h>
+#include <wx/listbox.h>
+#include <wx/msgdlg.h>
+#include <wx/panel.h>
+#include <wx/sizer.h>
+#include <wx/string.h>
 #include <wx/textctrl.h>
-#include <wx/thread.h>
+#include <wx/translation.h>
+#include <wx/window.h>
+#include <wx/windowid.h>
 
+#include "Common/Common.h"
 #include "Common/FileUtil.h"
-#include "Common/LogManager.h"
+#include "Common/IniFile.h"
+#include "Common/StringUtil.h"
+#include "Common/SymbolDB.h"
 #include "Core/ConfigManager.h"
-#include "Core/Core.h"
+#include "Core/CoreParameter.h"
 #include "Core/Debugger/PPCDebugInterface.h"
-#include "Core/HW/CPU.h"
 #include "Core/HW/DSP.h"
 #include "Core/HW/Memmap.h"
 #include "Core/PowerPC/PowerPC.h"
-#include "Core/PowerPC/PPCSymbolDB.h"
 #include "DolphinWX/Globals.h"
 #include "DolphinWX/WxUtils.h"
+#include "DolphinWX/Debugger/MemoryView.h"
 #include "DolphinWX/Debugger/MemoryWindow.h"
 
+class DebugInterface;
+
 enum
 {
 	IDM_MEM_ADDRBOX = 350,
diff --git a/Source/Core/DolphinWX/Debugger/MemoryWindow.h b/Source/Core/DolphinWX/Debugger/MemoryWindow.h
index 19fbe1c..b3ffb13 100644
--- a/Source/Core/DolphinWX/Debugger/MemoryWindow.h
+++ b/Source/Core/DolphinWX/Debugger/MemoryWindow.h
@@ -4,17 +4,23 @@
 
 #pragma once
 
-#include <wx/dialog.h>
-#include <wx/listbox.h>
-#include <wx/textctrl.h>
+#include <wx/defs.h>
+#include <wx/event.h>
+#include <wx/gdicmn.h>
+#include <wx/panel.h>
+#include <wx/string.h>
+#include <wx/translation.h>
+#include <wx/windowid.h>
 
-#include "Common/StringUtil.h"
-#include "Common/Thread.h"
-#include "Core/CoreParameter.h"
-#include "DolphinWX/Debugger/MemoryView.h"
+#include "Common/CommonTypes.h"
 
-class CRegisterWindow;
-class CBreakPointWindow;
+class CMemoryView;
+class IniFile;
+class wxButton;
+class wxCheckBox;
+class wxListBox;
+class wxTextCtrl;
+class wxWindow;
 
 class CMemoryWindow
 	: public wxPanel
diff --git a/Source/Core/DolphinWX/Debugger/RegisterView.cpp b/Source/Core/DolphinWX/Debugger/RegisterView.cpp
index b2045c8..cf0243b 100644
--- a/Source/Core/DolphinWX/Debugger/RegisterView.cpp
+++ b/Source/Core/DolphinWX/Debugger/RegisterView.cpp
@@ -2,13 +2,24 @@
 // Licensed under GPLv2
 // Refer to the license.txt file included.
 
-#include "Common/IniFile.h"
+#include <wx/chartype.h>
+#include <wx/colour.h>
+#include <wx/defs.h>
+#include <wx/grid.h>
+#include <wx/string.h>
+#include <wx/windowid.h>
+
+#include "Common/CommonTypes.h"
+#include "Common/StringUtil.h"
 #include "Core/HW/ProcessorInterface.h"
 #include "Core/PowerPC/PowerPC.h"
+#include "Core/PowerPC/Gekko.h"
 #include "DolphinWX/WxUtils.h"
 #include "DolphinWX/Debugger/DebuggerUIUtil.h"
 #include "DolphinWX/Debugger/RegisterView.h"
 
+class wxWindow;
+
 // F-zero 80005e60 wtf??
 
 extern const char* GetGPRName(unsigned int index);
diff --git a/Source/Core/DolphinWX/Debugger/RegisterView.h b/Source/Core/DolphinWX/Debugger/RegisterView.h
index 6bcd46a..9b91cae 100644
--- a/Source/Core/DolphinWX/Debugger/RegisterView.h
+++ b/Source/Core/DolphinWX/Debugger/RegisterView.h
@@ -4,10 +4,16 @@
 
 #pragma once
 
+#include <cstring>
+#include <wx/defs.h>
 #include <wx/grid.h>
+#include <wx/string.h>
+#include <wx/windowid.h>
 
 #include "Common/Common.h"
 
+class wxWindow;
+
 // New register view:
 // R0  0x8000000    F0   0.0000       F0_PS1 0.0000
 // R1  0x8000000    F1   0.0000       F1_PS1 0.0000
diff --git a/Source/Core/DolphinWX/Debugger/RegisterWindow.cpp b/Source/Core/DolphinWX/Debugger/RegisterWindow.cpp
index c18d207..5188f87 100644
--- a/Source/Core/DolphinWX/Debugger/RegisterWindow.cpp
+++ b/Source/Core/DolphinWX/Debugger/RegisterWindow.cpp
@@ -2,12 +2,20 @@
 // Licensed under GPLv2
 // Refer to the license.txt file included.
 
-#include <wx/wx.h>
+#include <cstddef>
+#include <wx/defs.h>
+#include <wx/event.h>
+#include <wx/gdicmn.h>
+#include <wx/panel.h>
+#include <wx/sizer.h>
+#include <wx/string.h>
+#include <wx/windowid.h>
 
-#include "Core/PowerPC/PowerPC.h"
 #include "DolphinWX/Debugger/RegisterView.h"
 #include "DolphinWX/Debugger/RegisterWindow.h"
 
+class wxWindow;
+
 extern const char* GetGRPName(unsigned int index);
 
 BEGIN_EVENT_TABLE(CRegisterWindow, wxPanel)
diff --git a/Source/Core/DolphinWX/Debugger/RegisterWindow.h b/Source/Core/DolphinWX/Debugger/RegisterWindow.h
index f1d8db1..f0b38b8 100644
--- a/Source/Core/DolphinWX/Debugger/RegisterWindow.h
+++ b/Source/Core/DolphinWX/Debugger/RegisterWindow.h
@@ -4,8 +4,16 @@
 
 #pragma once
 
+#include <wx/defs.h>
+#include <wx/event.h>
+#include <wx/gdicmn.h>
+#include <wx/panel.h>
+#include <wx/string.h>
+#include <wx/translation.h>
+#include <wx/windowid.h>
+
 class CRegisterView;
-class IniFile;
+class wxWindow;
 
 class CRegisterWindow
 	: public wxPanel
diff --git a/Source/Core/DolphinWX/FifoPlayerDlg.cpp b/Source/Core/DolphinWX/FifoPlayerDlg.cpp
index 5a8a39b..95209a6 100644
--- a/Source/Core/DolphinWX/FifoPlayerDlg.cpp
+++ b/Source/Core/DolphinWX/FifoPlayerDlg.cpp
@@ -3,19 +3,47 @@
 // Refer to the license.txt file included.
 
 #include <algorithm>
+#include <cstddef>
+#include <mutex>
+#include <string>
 #include <vector>
+
+#include <wx/accel.h>
+#include <wx/button.h>
+#include <wx/chartype.h>
+#include <wx/checkbox.h>
 #include <wx/clipbrd.h>
+#include <wx/dataobj.h>
+#include <wx/defs.h>
+#include <wx/dialog.h>
+#include <wx/event.h>
+#include <wx/filedlg.h>
+#include <wx/gdicmn.h>
+#include <wx/listbox.h>
+#include <wx/notebook.h>
+#include <wx/panel.h>
+#include <wx/sizer.h>
+#include <wx/spinbutt.h>
 #include <wx/spinctrl.h>
+#include <wx/statbox.h>
+#include <wx/stattext.h>
+#include <wx/string.h>
+#include <wx/textctrl.h>
+#include <wx/translation.h>
+#include <wx/utils.h>
 
 #include "Common/Common.h"
-#include "Common/FileUtil.h"
-#include "Common/Thread.h"
 #include "Core/FifoPlayer/FifoPlayer.h"
+#include "Core/FifoPlayer/FifoDataFile.h"
+#include "Core/FifoPlayer/FifoPlaybackAnalyzer.h"
 #include "Core/FifoPlayer/FifoRecorder.h"
 #include "DolphinWX/FifoPlayerDlg.h"
 #include "DolphinWX/WxUtils.h"
+#include "VideoCommon/BPMemory.h"
 #include "VideoCommon/OpcodeDecoding.h"
 
+class wxWindow;
+
 DECLARE_EVENT_TYPE(RECORDING_FINISHED_EVENT, -1)
 DEFINE_EVENT_TYPE(RECORDING_FINISHED_EVENT)
 
diff --git a/Source/Core/DolphinWX/FifoPlayerDlg.h b/Source/Core/DolphinWX/FifoPlayerDlg.h
index 4e72878..7fa8868 100644
--- a/Source/Core/DolphinWX/FifoPlayerDlg.h
+++ b/Source/Core/DolphinWX/FifoPlayerDlg.h
@@ -4,12 +4,28 @@
 
 #pragma once
 
+#include <cstddef>
 #include <vector>
-#include <wx/notebook.h>
-#include <wx/wx.h>
-
+#include <wx/defs.h>
+#include <wx/dialog.h>
+#include <wx/string.h>
+
+#include "Common/CommonTypes.h"
+
+class wxButton;
+class wxCheckBox;
+class wxCommandEvent;
+class wxEvent;
+class wxEvtHandler;
+class wxListBox;
+class wxNotebook;
+class wxPaintEvent;
+class wxPanel;
 class wxSpinCtrl;
 class wxSpinEvent;
+class wxStaticText;
+class wxTextCtrl;
+class wxWindow;
 
 class FifoPlayerDlg : public wxDialog
 {
diff --git a/Source/Core/DolphinWX/Frame.cpp b/Source/Core/DolphinWX/Frame.cpp
index 2a17f6c..f1c2773 100644
--- a/Source/Core/DolphinWX/Frame.cpp
+++ b/Source/Core/DolphinWX/Frame.cpp
@@ -13,31 +13,58 @@
 #ifdef __APPLE__
 #include <Cocoa/Cocoa.h>
 #endif
-#include <wx/datetime.h>
+
+#include <cstddef>
+#include <string>
+#include <utility>
+#include <vector>
+#include <wx/chartype.h>
+#include <wx/defs.h>
+#include <wx/event.h>
+#include <wx/frame.h>
+#include <wx/gdicmn.h>
+#include <wx/icon.h>
+#include <wx/listbase.h>
+#include <wx/menu.h>
+#include <wx/menuitem.h>
+#include <wx/mousestate.h>
+#include <wx/msgdlg.h>
+#include <wx/panel.h>
+#include <wx/sizer.h>
+#include <wx/statusbr.h>
+#include <wx/string.h>
+#include <wx/textctrl.h>
+#include <wx/thread.h>
+#include <wx/toplevel.h>
+#include <wx/translation.h>
+#include <wx/window.h>
+#include <wx/windowid.h>
+#include <wx/aui/auibar.h>
+#include <wx/aui/auibook.h>
+#include <wx/aui/framemanager.h>
 
 #include "Common/Common.h"
 #include "Common/FileUtil.h"
-#include "Common/Timer.h"
+#include "Common/Thread.h"
 
-#include "Core/BootManager.h"
 #include "Core/ConfigManager.h"
 #include "Core/Core.h"
+#include "Core/CoreParameter.h"
 #include "Core/Movie.h"
 #include "Core/State.h"
-#include "Core/VolumeHandler.h"
-#include "Core/HW/DVDInterface.h"
-#include "Core/HW/GCPad.h"
-#include "Core/IPC_HLE/WII_IPC_HLE_Device_usb.h"
 
-#include "DolphinWX/CheatsWindow.h"
-#include "DolphinWX/ConfigMain.h"
 #include "DolphinWX/Frame.h"
 #include "DolphinWX/GameListCtrl.h"
 #include "DolphinWX/Globals.h"
+#include "DolphinWX/LogWindow.h"
+#include "DolphinWX/TASInputDlg.h"
+#include "DolphinWX/WxUtils.h"
+#include "DolphinWX/Debugger/CodeWindow.h"
+
+#include "InputCommon/GCPadStatus.h"
 
 #include "VideoCommon/RenderBase.h"
 #include "VideoCommon/VertexShaderManager.h"
-#include "VideoCommon/VideoBackendBase.h"
 #include "VideoCommon/VideoConfig.h"
 
 // Resources
diff --git a/Source/Core/DolphinWX/Frame.h b/Source/Core/DolphinWX/Frame.h
index 6894f9d..9cfbdb6 100644
--- a/Source/Core/DolphinWX/Frame.h
+++ b/Source/Core/DolphinWX/Frame.h
@@ -4,44 +4,52 @@
 
 #pragma once
 
+#include <cstddef>
+#include <mutex>
 #include <string>
 #include <vector>
-#include <wx/artprov.h>
-#include <wx/busyinfo.h>
-#include <wx/listctrl.h>
+#include <wx/bitmap.h>
+#include <wx/chartype.h>
+#include <wx/defs.h>
+#include <wx/event.h>
+#include <wx/frame.h>
+#include <wx/gdicmn.h>
+#include <wx/image.h>
 #include <wx/mstream.h>
-#include <wx/tooltip.h>
-#include <wx/wx.h>
-#include <wx/aui/aui.h>
+#include <wx/panel.h>
+#include <wx/string.h>
+#include <wx/toplevel.h>
+#include <wx/windowid.h>
 
-#include "Common/CDUtils.h"
-#include "Core/Movie.h"
+#include "Common/CommonTypes.h"
+#include "Common/Thread.h"
 #include "DolphinWX/Globals.h"
-#include "DolphinWX/LogConfigWindow.h"
-#include "DolphinWX/LogWindow.h"
-#include "DolphinWX/TASInputDlg.h"
-#include "DolphinWX/Debugger/CodeWindow.h"
+#include "InputCommon/GCPadStatus.h"
 
 #if defined(HAVE_X11) && HAVE_X11
 #include "DolphinWX/X11Utils.h"
 #endif
 
-// A shortcut to access the bitmaps
-#define wxGetBitmapFromMemory(name) _wxGetBitmapFromMemory(name, sizeof(name))
-static inline wxBitmap _wxGetBitmapFromMemory(const unsigned char* data, int length)
-{
-	wxMemoryInputStream is(data, length);
-	return(wxBitmap(wxImage(is, wxBITMAP_TYPE_ANY, -1), -1));
-}
-
 // Class declarations
 class CGameListCtrl;
-class GameListItem;
+class CCodeWindow;
 class CLogWindow;
 class FifoPlayerDlg;
+class LogConfigWindow;
 class NetPlaySetupDiag;
+class TASInputDlg;
 class wxCheatsWindow;
 
+class wxAuiManager;
+class wxAuiManagerEvent;
+class wxAuiNotebook;
+class wxAuiNotebookEvent;
+class wxAuiToolBar;
+class wxAuiToolBarEvent;
+class wxListEvent;
+class wxMenuItem;
+class wxWindow;
+
 // The CPanel class to receive MSWWindowProc messages from the video backend.
 class CPanel : public wxPanel
 {
diff --git a/Source/Core/DolphinWX/FrameAui.cpp b/Source/Core/DolphinWX/FrameAui.cpp
index ccba858..52d8ca3 100644
--- a/Source/Core/DolphinWX/FrameAui.cpp
+++ b/Source/Core/DolphinWX/FrameAui.cpp
@@ -2,12 +2,45 @@
 // Licensed under GPLv2
 // Refer to the license.txt file included.
 
+#include <cstddef>
+#include <string>
+#include <vector>
+#include <wx/chartype.h>
+#include <wx/defs.h>
+#include <wx/dynarray.h>
+#include <wx/event.h>
+#include <wx/frame.h>
+#include <wx/gdicmn.h>
+#include <wx/list.h>
+#include <wx/menu.h>
+#include <wx/menuitem.h>
+#include <wx/msgdlg.h>
+#include <wx/object.h>
+#include <wx/panel.h>
+#include <wx/rtti.h>
+#include <wx/sizer.h>
+#include <wx/statusbr.h>
+#include <wx/string.h>
+#include <wx/toplevel.h>
+#include <wx/translation.h>
+#include <wx/textdlg.h>
+#include <wx/window.h>
+#include <wx/windowid.h>
+#include <wx/aui/auibar.h>
+#include <wx/aui/auibook.h>
+#include <wx/aui/framemanager.h>
+
 #include "Common/Common.h"
+#include "Common/FileUtil.h"
+#include "Common/IniFile.h"
+#include "Common/StringUtil.h"
 #include "Core/ConfigManager.h"
 #include "DolphinWX/Frame.h"
 #include "DolphinWX/Globals.h"
+#include "DolphinWX/LogConfigWindow.h"
 #include "DolphinWX/LogWindow.h"
 #include "DolphinWX/WxUtils.h"
+#include "DolphinWX/Debugger/CodeWindow.h"
 
 // ------------
 // Aui events
diff --git a/Source/Core/DolphinWX/FrameTools.cpp b/Source/Core/DolphinWX/FrameTools.cpp
index 27da521..b51be97 100644
--- a/Source/Core/DolphinWX/FrameTools.cpp
+++ b/Source/Core/DolphinWX/FrameTools.cpp
@@ -14,31 +14,60 @@ window handle that is returned by CreateWindow() can be accessed from
 Core::GetWindowHandle().
 */
 
-#include <wx/datetime.h>
+#include <cstdarg>
+#include <cstdio>
+#include <mutex>
+#include <string>
+#include <vector>
+#include <wx/app.h>
+#include <wx/bitmap.h>
+#include <wx/chartype.h>
+#include <wx/defs.h>
+#include <wx/event.h>
+#include <wx/filedlg.h>
+#include <wx/filefn.h>
+#include <wx/gdicmn.h>
+#include <wx/msgdlg.h>
+#include <wx/progdlg.h>
+#include <wx/menu.h>
+#include <wx/menuitem.h>
+#include <wx/panel.h>
+#include <wx/statusbr.h>
+#include <wx/strconv.h>
+#include <wx/string.h>
+#include <wx/thread.h>
+#include <wx/toplevel.h>
+#include <wx/translation.h>
+#include <wx/utils.h>
+#include <wx/window.h>
+#include <wx/aui/auibar.h>
+#include <wx/aui/framemanager.h>
 
 #ifdef __APPLE__
 #include <AppKit/AppKit.h>
 #endif
 
+#include "Common/CDUtils.h"
 #include "Common/Common.h"
 #include "Common/FileSearch.h"
 #include "Common/FileUtil.h"
-#include "Common/Timer.h"
+#include "Common/NandPaths.h"
 
 #include "Core/BootManager.h"
 #include "Core/ConfigManager.h"
 #include "Core/Core.h"
+#include "Core/CoreParameter.h"
 #include "Core/Host.h"
 #include "Core/Movie.h"
 #include "Core/State.h"
-#include "Core/VolumeHandler.h"
 #include "Core/HW/CPU.h"
 #include "Core/HW/DVDInterface.h"
 #include "Core/HW/GCPad.h"
 #include "Core/HW/ProcessorInterface.h"
+#include "Core/HW/SI_Device.h"
 #include "Core/HW/Wiimote.h"
-//#include "IPC_HLE/WII_IPC_HLE_Device_FileIO.h"
 #include "Core/IPC_HLE/WII_IPC_HLE_Device_usb.h"
+#include "Core/IPC_HLE/WII_IPC_HLE_WiiMote.h"
 #include "Core/PowerPC/PowerPC.h"
 
 #include "DiscIO/NANDContentLoader.h"
@@ -52,7 +81,7 @@ Core::GetWindowHandle().
 #include "DolphinWX/Globals.h"
 #include "DolphinWX/HotkeyDlg.h"
 #include "DolphinWX/InputConfigDiag.h"
-#include "DolphinWX/LogConfigWindow.h"
+#include "DolphinWX/ISOFile.h"
 #include "DolphinWX/LogWindow.h"
 #include "DolphinWX/MemcardManager.h"
 #include "DolphinWX/NetWindow.h"
@@ -60,6 +89,10 @@ Core::GetWindowHandle().
 #include "DolphinWX/WiimoteConfigDiag.h"
 #include "DolphinWX/WXInputBase.h"
 #include "DolphinWX/WxUtils.h"
+#include "DolphinWX/Debugger/CodeWindow.h"
+#include "DolphinWX/MemoryCards/WiiSaveCrypted.h"
+
+#include "InputCommon/ControllerInterface/ControllerInterface.h"
 
 #include "VideoCommon/VideoBackendBase.h"
 
@@ -83,6 +116,9 @@ extern "C" {
 #include "DolphinWX/resources/Dolphin.c" // NOLINT: Dolphin icon
 };
 
+class InputPlugin;
+class wxFrame;
+
 bool confirmStop = false;
 
 // Create menu items
diff --git a/Source/Core/DolphinWX/GameListCtrl.cpp b/Source/Core/DolphinWX/GameListCtrl.cpp
index 800cee9..bd420f8 100644
--- a/Source/Core/DolphinWX/GameListCtrl.cpp
+++ b/Source/Core/DolphinWX/GameListCtrl.cpp
@@ -4,25 +4,65 @@
 
 #include <algorithm>
 #include <cinttypes>
+#include <cstddef>
+#include <cstdio>
+#include <cstring>
 #include <memory>
+#include <string>
+#include <vector>
+#include <wx/app.h>
+#include <wx/bitmap.h>
+#include <wx/buffer.h>
+#include <wx/chartype.h>
+#include <wx/colour.h>
+#include <wx/defs.h>
+#include <wx/dirdlg.h>
+#include <wx/event.h>
+#include <wx/filedlg.h>
+#include <wx/filefn.h>
 #include <wx/filename.h>
-#include <wx/fontmap.h>
+#include <wx/gdicmn.h>
 #include <wx/imaglist.h>
+#include <wx/listbase.h>
+#include <wx/listctrl.h>
+#include <wx/menu.h>
+#include <wx/menuitem.h>
+#include <wx/msgdlg.h>
+#include <wx/progdlg.h>
+#include <wx/settings.h>
+#include <wx/string.h>
+#include <wx/tipwin.h>
+#include <wx/translation.h>
+#include <wx/unichar.h>
+#include <wx/utils.h>
+#include <wx/version.h>
+#include <wx/window.h>
+#include <wx/windowid.h>
 
 #include "Common/CDUtils.h"
+#include "Common/Common.h"
 #include "Common/FileSearch.h"
 #include "Common/FileUtil.h"
 #include "Common/MathUtil.h"
 #include "Common/StringUtil.h"
+#include "Common/SysConf.h"
 #include "Core/ConfigManager.h"
 #include "Core/Core.h"
+#include "Core/CoreParameter.h"
+#include "Core/Movie.h"
+#include "Core/Boot/Boot.h"
 #include "Core/HW/DVDInterface.h"
 #include "DiscIO/Blob.h"
+#include "DiscIO/Volume.h"
+#include "DiscIO/VolumeCreator.h"
+#include "DolphinWX/Frame.h"
 #include "DolphinWX/GameListCtrl.h"
 #include "DolphinWX/Globals.h"
+#include "DolphinWX/ISOFile.h"
 #include "DolphinWX/ISOProperties.h"
 #include "DolphinWX/Main.h"
 #include "DolphinWX/WxUtils.h"
+#include "DolphinWX/MemoryCards/WiiSaveCrypted.h"
 #include "DolphinWX/resources/Flag_Europe.xpm"
 #include "DolphinWX/resources/Flag_France.xpm"
 #include "DolphinWX/resources/Flag_Germany.xpm"
diff --git a/Source/Core/DolphinWX/GameListCtrl.h b/Source/Core/DolphinWX/GameListCtrl.h
index 7b3009d..1c183a5 100644
--- a/Source/Core/DolphinWX/GameListCtrl.h
+++ b/Source/Core/DolphinWX/GameListCtrl.h
@@ -4,14 +4,21 @@
 
 #pragma once
 
-#include <memory>
+#include <cstddef>
+#include <string>
 #include <vector>
 
+#include <wx/event.h>
+#include <wx/gdicmn.h>
 #include <wx/listctrl.h>
+#include <wx/string.h>
 #include <wx/tipwin.h>
+#include <wx/windowid.h>
 
 #include "DolphinWX/ISOFile.h"
-#include "DolphinWX/MemoryCards/WiiSaveCrypted.h"
+
+class wxListEvent;
+class wxWindow;
 
 class wxEmuStateTip : public wxTipWindow
 {
diff --git a/Source/Core/DolphinWX/GeckoCodeDiag.cpp b/Source/Core/DolphinWX/GeckoCodeDiag.cpp
index 7e48bf5..cbdb19e 100644
--- a/Source/Core/DolphinWX/GeckoCodeDiag.cpp
+++ b/Source/Core/DolphinWX/GeckoCodeDiag.cpp
@@ -3,13 +3,34 @@
 // Refer to the license.txt file included.
 
 #include <sstream>
-
+#include <string>
+#include <vector>
 #include <SFML/Network/Http.hpp>
-
+#include <wx/button.h>
+#include <wx/chartype.h>
+#include <wx/checklst.h>
+#include <wx/defs.h>
+#include <wx/event.h>
+#include <wx/gdicmn.h>
+#include <wx/listbox.h>
+#include <wx/panel.h>
+#include <wx/sizer.h>
+#include <wx/stattext.h>
+#include <wx/string.h>
+#include <wx/textctrl.h>
+#include <wx/translation.h>
+#include <wx/window.h>
+
+#include "Common/Common.h"
+#include "Common/StringUtil.h"
 #include "Core/Core.h"
+#include "Core/GeckoCode.h"
+#include "Core/GeckoCodeConfig.h"
 #include "DolphinWX/GeckoCodeDiag.h"
 #include "DolphinWX/WxUtils.h"
 
+class IniFile;
+
 namespace Gecko
 {
 
diff --git a/Source/Core/DolphinWX/GeckoCodeDiag.h b/Source/Core/DolphinWX/GeckoCodeDiag.h
index bf3fb06..eb569e7 100644
--- a/Source/Core/DolphinWX/GeckoCodeDiag.h
+++ b/Source/Core/DolphinWX/GeckoCodeDiag.h
@@ -4,10 +4,20 @@
 
 #pragma once
 
-#include <wx/wx.h>
+#include <string>
+#include <vector>
+#include <wx/panel.h>
 
 #include "Core/GeckoCode.h"
-#include "Core/GeckoCodeConfig.h"
+
+class IniFile;
+class wxButton;
+class wxCheckListBox;
+class wxCommandEvent;
+class wxListBox;
+class wxStaticText;
+class wxTextCtrl;
+class wxWindow;
 
 namespace Gecko
 {
diff --git a/Source/Core/DolphinWX/Globals.h b/Source/Core/DolphinWX/Globals.h
index f114b8f..9b60c45 100644
--- a/Source/Core/DolphinWX/Globals.h
+++ b/Source/Core/DolphinWX/Globals.h
@@ -7,24 +7,8 @@
 
 #pragma once
 
-#include <wx/aboutdlg.h>
-#include <wx/busyinfo.h>
-#include <wx/button.h>
-#include <wx/choice.h>
-#include <wx/cmdline.h>
-#include <wx/filedlg.h>
-#include <wx/image.h>
-#include <wx/imagpng.h>
-#include <wx/listctrl.h>
-#include <wx/log.h>
-#include <wx/progdlg.h>
-#include <wx/spinctrl.h>
-#include <wx/srchctrl.h>
-#include <wx/stattext.h>
-#include <wx/toolbar.h>
-#include <wx/wx.h>
-
-#include "Common/Common.h"
+#include <cstddef>
+#include <wx/event.h>
 
 enum
 {
diff --git a/Source/Core/DolphinWX/HotkeyDlg.cpp b/Source/Core/DolphinWX/HotkeyDlg.cpp
index 12b4bd8..5d075e0 100644
--- a/Source/Core/DolphinWX/HotkeyDlg.cpp
+++ b/Source/Core/DolphinWX/HotkeyDlg.cpp
@@ -2,10 +2,32 @@
 // Licensed under GPLv2
 // Refer to the license.txt file included.
 
+#include <cstddef>
+#include <wx/app.h>
+#include <wx/button.h>
+#include <wx/chartype.h>
+#include <wx/defs.h>
+#include <wx/dialog.h>
+#include <wx/event.h>
+#include <wx/font.h>
+#include <wx/gbsizer.h>
+#include <wx/gdicmn.h>
+#include <wx/panel.h>
 #include <wx/notebook.h>
-
+#include <wx/setup.h>
+#include <wx/sizer.h>
+#include <wx/stattext.h>
+#include <wx/string.h>
+#include <wx/timer.h>
+#include <wx/translation.h>
+#include <wx/windowid.h>
+
+#include "Core/CoreParameter.h"
 #include "Core/ConfigManager.h"
 #include "DolphinWX/HotkeyDlg.h"
+#include "DolphinWX/WXInputBase.h"
+
+class wxWindow;
 
 BEGIN_EVENT_TABLE(HotkeyConfigDialog,wxDialog)
 	EVT_COMMAND_RANGE(0, NUM_HOTKEYS - 1,
diff --git a/Source/Core/DolphinWX/HotkeyDlg.h b/Source/Core/DolphinWX/HotkeyDlg.h
index 8ca4fc9..90a1550 100644
--- a/Source/Core/DolphinWX/HotkeyDlg.h
+++ b/Source/Core/DolphinWX/HotkeyDlg.h
@@ -4,17 +4,15 @@
 
 #pragma once
 
-#include <wx/button.h>
-#include <wx/checkbox.h>
-#include <wx/combobox.h>
-#include <wx/gbsizer.h>
-#include <wx/stattext.h>
-#include <wx/textctrl.h>
-#include <wx/wx.h>
-
-#include "Common/Common.h"
+#include <wx/dialog.h>
+#include <wx/defs.h>
+#include <wx/event.h>
+#include <wx/gdicmn.h>
+#include <wx/string.h>
+#include <wx/translation.h>
+#include <wx/windowid.h>
+
 #include "Core/CoreParameter.h"
-#include "DolphinWX/WXInputBase.h"
 
 #if defined(HAVE_X11) && HAVE_X11
 #include "InputCommon/X11InputBase.h"
@@ -22,6 +20,11 @@
 #include <X11/keysym.h>
 #endif
 
+class wxButton;
+class wxTimer;
+class wxTimerEvent;
+class wxWindow;
+
 class HotkeyConfigDialog : public wxDialog
 {
 	public:
diff --git a/Source/Core/DolphinWX/ISOFile.cpp b/Source/Core/DolphinWX/ISOFile.cpp
index fabdd9e..a8b20a4 100644
--- a/Source/Core/DolphinWX/ISOFile.cpp
+++ b/Source/Core/DolphinWX/ISOFile.cpp
@@ -3,26 +3,34 @@
 // Refer to the license.txt file included.
 
 #include <cinttypes>
+#include <cstdio>
+#include <cstring>
 #include <string>
 #include <vector>
-#include <wx/mstream.h>
+#include <wx/bitmap.h>
+#include <wx/filefn.h>
+#include <wx/gdicmn.h>
+#include <wx/image.h>
+#include <wx/string.h>
 
 #include "Common/ChunkFile.h"
 #include "Common/Common.h"
 #include "Common/CommonPaths.h"
-#include "Common/FileSearch.h"
 #include "Common/FileUtil.h"
 #include "Common/Hash.h"
 #include "Common/IniFile.h"
 #include "Common/StringUtil.h"
 
 #include "Core/ConfigManager.h"
+#include "Core/CoreParameter.h"
+#include "Core/Boot/Boot.h"
 
 #include "DiscIO/BannerLoader.h"
 #include "DiscIO/CompressedBlob.h"
 #include "DiscIO/Filesystem.h"
+#include "DiscIO/Volume.h"
+#include "DiscIO/VolumeCreator.h"
 
-#include "DolphinWX/Globals.h"
 #include "DolphinWX/ISOFile.h"
 #include "DolphinWX/WxUtils.h"
 
diff --git a/Source/Core/DolphinWX/ISOFile.h b/Source/Core/DolphinWX/ISOFile.h
index dc6d211..889bfee 100644
--- a/Source/Core/DolphinWX/ISOFile.h
+++ b/Source/Core/DolphinWX/ISOFile.h
@@ -7,8 +7,8 @@
 #include <string>
 #include <vector>
 
+#include "Common/Common.h"
 #include "DiscIO/Volume.h"
-#include "DiscIO/VolumeCreator.h"
 
 #if defined(HAVE_WX) && HAVE_WX
 #include <wx/image.h>
diff --git a/Source/Core/DolphinWX/ISOProperties.cpp b/Source/Core/DolphinWX/ISOProperties.cpp
index e632340..5de3808 100644
--- a/Source/Core/DolphinWX/ISOProperties.cpp
+++ b/Source/Core/DolphinWX/ISOProperties.cpp
@@ -7,17 +7,69 @@
 #endif
 
 #include <cinttypes>
+#include <cstddef>
+#include <cstdio>
+#include <cstring>
+#include <fstream>
+#include <set>
+#include <string>
+#include <vector>
 #include <type_traits>
+#include <wx/arrstr.h>
+#include <wx/bitmap.h>
+#include <wx/button.h>
+#include <wx/chartype.h>
+#include <wx/checkbox.h>
+#include <wx/checklst.h>
+#include <wx/choice.h>
+#include <wx/defs.h>
+#include <wx/dialog.h>
+#include <wx/dirdlg.h>
+#include <wx/dynarray.h>
+#include <wx/event.h>
+#include <wx/filedlg.h>
+#include <wx/gbsizer.h>
+#include <wx/gdicmn.h>
+#include <wx/image.h>
+#include <wx/imaglist.h>
+#include <wx/itemid.h>
+#include <wx/menu.h>
+#include <wx/mimetype.h>
+#include <wx/msgdlg.h>
+#include <wx/notebook.h>
+#include <wx/panel.h>
+#include <wx/progdlg.h>
+#include <wx/sizer.h>
+#include <wx/statbmp.h>
+#include <wx/stattext.h>
+#include <wx/string.h>
+#include <wx/textctrl.h>
+#include <wx/thread.h>
+#include <wx/translation.h>
+#include <wx/treebase.h>
+#include <wx/treectrl.h>
+#include <wx/utils.h>
+#include <wx/validate.h>
+#include <wx/windowid.h>
 
 #include "Common/Common.h"
 #include "Common/CommonPaths.h"
+#include "Common/FileUtil.h"
+#include "Common/IniFile.h"
 #include "Common/StringUtil.h"
+#include "Common/SysConf.h"
+#include "Core/ActionReplay.h"
+#include "Core/GeckoCodeConfig.h"
 #include "Core/ConfigManager.h"
+#include "Core/CoreParameter.h"
+#include "Core/PatchEngine.h"
+#include "Core/Boot/Boot.h"
 #include "DiscIO/Filesystem.h"
+#include "DiscIO/Volume.h"
 #include "DiscIO/VolumeCreator.h"
 #include "DolphinWX/ARCodeAddEdit.h"
 #include "DolphinWX/GeckoCodeDiag.h"
-#include "DolphinWX/Globals.h"
+#include "DolphinWX/ISOFile.h"
 #include "DolphinWX/ISOProperties.h"
 #include "DolphinWX/PatchAddEdit.h"
 #include "DolphinWX/PHackSettings.h"
@@ -26,6 +78,8 @@
 #include "DolphinWX/resources/isoprop_file.xpm"
 #include "DolphinWX/resources/isoprop_folder.xpm"
 
+class wxWindow;
+
 struct WiiPartition
 {
 	DiscIO::IVolume *Partition;
diff --git a/Source/Core/DolphinWX/ISOProperties.h b/Source/Core/DolphinWX/ISOProperties.h
index 12c709f..d36fad0 100644
--- a/Source/Core/DolphinWX/ISOProperties.h
+++ b/Source/Core/DolphinWX/ISOProperties.h
@@ -4,24 +4,33 @@
 
 #pragma once
 
+#include <cstddef>
+#include <set>
 #include <string>
-#include <wx/filepicker.h>
-#include <wx/fontmap.h>
-#include <wx/gbsizer.h>
-#include <wx/imaglist.h>
-#include <wx/mimetype.h>
-#include <wx/notebook.h>
-#include <wx/sizer.h>
-#include <wx/statbmp.h>
-#include <wx/treectrl.h>
-#include <wx/wx.h>
+#include <vector>
+#include <wx/arrstr.h>
+#include <wx/dialog.h>
+#include <wx/event.h>
+#include <wx/gdicmn.h>
+#include <wx/string.h>
+#include <wx/toplevel.h>
+#include <wx/translation.h>
+#include <wx/treebase.h>
+#include <wx/windowid.h>
 
 #include "Common/IniFile.h"
-#include "Core/ActionReplay.h"
-#include "Core/PatchEngine.h"
-#include "DiscIO/Filesystem.h"
-#include "DolphinWX/GeckoCodeDiag.h"
-#include "DolphinWX/ISOFile.h"
+
+class GameListItem;
+class wxButton;
+class wxCheckBox;
+class wxCheckListBox;
+class wxChoice;
+class wxStaticBitmap;
+class wxTextCtrl;
+class wxTreeCtrl;
+class wxWindow;
+namespace DiscIO { struct SFileInfo; }
+namespace Gecko { class CodeConfigPanel; }
 
 struct PHackData
 {
diff --git a/Source/Core/DolphinWX/InputConfigDiag.cpp b/Source/Core/DolphinWX/InputConfigDiag.cpp
index d707eac..290a87d 100644
--- a/Source/Core/DolphinWX/InputConfigDiag.cpp
+++ b/Source/Core/DolphinWX/InputConfigDiag.cpp
@@ -2,12 +2,60 @@
 // Licensed under GPLv2
 // Refer to the license.txt file included.
 
+#include <algorithm>
+#include <cctype>
+#include <cstddef>
+#include <memory>
+#include <mutex>
+#include <string>
+#include <vector>
+#include <wx/app.h>
+#include <wx/arrstr.h>
+#include <wx/bitmap.h>
+#include <wx/button.h>
+#include <wx/chartype.h>
+#include <wx/checkbox.h>
+#include <wx/choice.h>
+#include <wx/control.h>
+#include <wx/combobox.h>
+#include <wx/dcmemory.h>
+#include <wx/defs.h>
+#include <wx/dialog.h>
+#include <wx/event.h>
+#include <wx/font.h>
+#include <wx/gdicmn.h>
+#include <wx/listbox.h>
+#include <wx/notebook.h>
+#include <wx/panel.h>
+#include <wx/sizer.h>
+#include <wx/slider.h>
+#include <wx/spinctrl.h>
+#include <wx/statbmp.h>
+#include <wx/stattext.h>
+#include <wx/string.h>
+#include <wx/textctrl.h>
+#include <wx/timer.h>
+#include <wx/toplevel.h>
+#include <wx/translation.h>
+#include <wx/unichar.h>
+
+#include "Common/FileSearch.h"
+#include "Common/FileUtil.h"
+#include "Common/IniFile.h"
+#include "Common/MsgHandler.h"
 #include "Core/HW/Wiimote.h"
 #include "DolphinWX/InputConfigDiag.h"
 #include "DolphinWX/UDPConfigDiag.h"
 #include "DolphinWX/WxUtils.h"
+#include "InputCommon/ControllerEmu.h"
+#include "InputCommon/InputConfig.h"
+#include "InputCommon/ControllerInterface/ControllerInterface.h"
+#include "InputCommon/ControllerInterface/Device.h"
 #include "InputCommon/ControllerInterface/ExpressionParser.h"
 
+class UDPWrapper;
+class wxWindow;
+
 using namespace ciface::ExpressionParser;
 
 void GamepadPage::ConfigUDPWii(wxCommandEvent &event)
diff --git a/Source/Core/DolphinWX/InputConfigDiag.h b/Source/Core/DolphinWX/InputConfigDiag.h
index d265e87..f4eeafe 100644
--- a/Source/Core/DolphinWX/InputConfigDiag.h
+++ b/Source/Core/DolphinWX/InputConfigDiag.h
@@ -11,24 +11,37 @@
 // might have to change this setup for wiimote
 #define PROFILES_PATH       "Profiles/"
 
-#include <sstream>
+#include <cstddef>
+#include <string>
 #include <vector>
 #include <wx/button.h>
-#include <wx/checkbox.h>
-#include <wx/combobox.h>
-#include <wx/listbox.h>
-#include <wx/notebook.h>
+#include <wx/control.h>
+#include <wx/dialog.h>
+#include <wx/gdicmn.h>
 #include <wx/panel.h>
+#include <wx/sizer.h>
 #include <wx/spinctrl.h>
-#include <wx/stattext.h>
-#include <wx/textctrl.h>
-#include <wx/wx.h>
+#include <wx/string.h>
+#include <wx/translation.h>
 
-#include "Common/FileSearch.h"
 #include "InputCommon/ControllerEmu.h"
-#include "InputCommon/InputConfig.h"
-#include "InputCommon/UDPWrapper.h"
 #include "InputCommon/ControllerInterface/ControllerInterface.h"
+#include "InputCommon/ControllerInterface/Device.h"
+
+class InputPlugin;
+class UDPWrapper;
+class wxComboBox;
+class wxCommandEvent;
+class wxEvent;
+class wxListBox;
+class wxNotebook;
+class wxSlider;
+class wxStaticBitmap;
+class wxStaticText;
+class wxTextCtrl;
+class wxTimer;
+class wxTimerEvent;
+class wxWindow;
 
 class PadSetting
 {
diff --git a/Source/Core/DolphinWX/InputConfigDiagBitmaps.cpp b/Source/Core/DolphinWX/InputConfigDiagBitmaps.cpp
index 2e722ff..e41f155 100644
--- a/Source/Core/DolphinWX/InputConfigDiagBitmaps.cpp
+++ b/Source/Core/DolphinWX/InputConfigDiagBitmaps.cpp
@@ -2,9 +2,33 @@
 // Licensed under GPLv2
 // Refer to the license.txt file included.
 
+#include <cstring>
+#include <memory>
+#include <mutex>
+#include <string>
+#include <vector>
+#include <wx/bitmap.h>
+#include <wx/brush.h>
+#include <wx/chartype.h>
+#include <wx/colour.h>
+#include <wx/dcmemory.h>
+#include <wx/defs.h>
+#include <wx/font.h>
+#include <wx/gdicmn.h>
+#include <wx/notebook.h>
+#include <wx/pen.h>
+#include <wx/statbmp.h>
+#include <wx/string.h>
+
 #include "DolphinWX/InputConfigDiag.h"
 #include "DolphinWX/WxUtils.h"
 
+#include "InputCommon/ControllerEmu.h"
+#include "InputCommon/ControllerInterface/ControllerInterface.h"
+#include "InputCommon/ControllerInterface/Device.h"
+
+class wxTimerEvent;
+
 void InputConfigDialog::UpdateBitmaps(wxTimerEvent& WXUNUSED(event))
 {
 	wxFont small_font(6, wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD);
diff --git a/Source/Core/DolphinWX/LogConfigWindow.cpp b/Source/Core/DolphinWX/LogConfigWindow.cpp
index 1ec51c7..26cd3c1 100644
--- a/Source/Core/DolphinWX/LogConfigWindow.cpp
+++ b/Source/Core/DolphinWX/LogConfigWindow.cpp
@@ -2,12 +2,32 @@
 // Licensed under GPLv2
 // Refer to the license.txt file included.
 
+#include <vector>
+#include <wx/anybutton.h>
+#include <wx/arrstr.h>
+#include <wx/button.h>
+#include <wx/checkbox.h>
+#include <wx/checklst.h>
+#include <wx/defs.h>
+#include <wx/event.h>
+#include <wx/gdicmn.h>
+#include <wx/panel.h>
+#include <wx/radiobox.h>
+#include <wx/sizer.h>
+#include <wx/translation.h>
+#include <wx/validate.h>
+#include <wx/windowid.h>
+
 #include "Common/FileUtil.h"
+#include "Common/IniFile.h"
+#include "Common/Log.h"
 #include "Common/LogManager.h"
 #include "DolphinWX/LogConfigWindow.h"
 #include "DolphinWX/LogWindow.h"
 #include "DolphinWX/WxUtils.h"
 
+class wxWindow;
+
 LogConfigWindow::LogConfigWindow(wxWindow* parent, CLogWindow *log_window, wxWindowID id)
 	: wxPanel(parent, id, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL, _("Log Configuration"))
 	, m_LogWindow(log_window), enableAll(true)
diff --git a/Source/Core/DolphinWX/LogConfigWindow.h b/Source/Core/DolphinWX/LogConfigWindow.h
index a465c74..50d2b39 100644
--- a/Source/Core/DolphinWX/LogConfigWindow.h
+++ b/Source/Core/DolphinWX/LogConfigWindow.h
@@ -4,12 +4,17 @@
 
 #pragma once
 
-#include <vector>
-#include <wx/wx.h>
+#include <wx/defs.h>
+#include <wx/panel.h>
+#include <wx/windowid.h>
 
-class CFrame;
 class LogManager;
 class CLogWindow;
+class wxCheckBox;
+class wxCheckListBox;
+class wxCommandEvent;
+class wxRadioBox;
+class wxWindow;
 
 class LogConfigWindow : public wxPanel
 {
diff --git a/Source/Core/DolphinWX/LogWindow.cpp b/Source/Core/DolphinWX/LogWindow.cpp
index 8376149..5a8be5e 100644
--- a/Source/Core/DolphinWX/LogWindow.cpp
+++ b/Source/Core/DolphinWX/LogWindow.cpp
@@ -2,10 +2,37 @@
 // Licensed under GPLv2
 // Refer to the license.txt file included.
 
-#include <wx/fontmap.h>
-
+#include <cstddef>
+#include <mutex>
+#include <queue>
+#include <utility>
+#include <vector>
+#include <wx/anybutton.h>
+#include <wx/button.h>
+#include <wx/chartype.h>
+#include <wx/checkbox.h>
+#include <wx/choice.h>
+#include <wx/colour.h>
+#include <wx/defs.h>
+#include <wx/event.h>
+#include <wx/font.h>
+#include <wx/gdicmn.h>
+#include <wx/panel.h>
+#include <wx/sizer.h>
+#include <wx/string.h>
+#include <wx/textctrl.h>
+#include <wx/timer.h>
+#include <wx/translation.h>
+#include <wx/validate.h>
+#include <wx/window.h>
+#include <wx/windowid.h>
+#include <wx/aui/framemanager.h>
+
+#include "Common/Common.h"
 #include "Common/FileUtil.h"
 #include "Common/IniFile.h"
+#include "Common/LogManager.h"
+#include "DolphinWX/Frame.h"
 #include "DolphinWX/LogWindow.h"
 #include "DolphinWX/WxUtils.h"
 #include "DolphinWX/Debugger/DebuggerUIUtil.h"
diff --git a/Source/Core/DolphinWX/LogWindow.h b/Source/Core/DolphinWX/LogWindow.h
index bb1b59c..2d92e16 100644
--- a/Source/Core/DolphinWX/LogWindow.h
+++ b/Source/Core/DolphinWX/LogWindow.h
@@ -4,11 +4,29 @@
 
 #pragma once
 
+#include <mutex>
 #include <queue>
+#include <utility>
+#include <vector>
+#include <wx/defs.h>
+#include <wx/event.h>
+#include <wx/font.h>
+#include <wx/gdicmn.h>
+#include <wx/panel.h>
+#include <wx/string.h>
+#include <wx/translation.h>
+#include <wx/windowid.h>
 
+#include "Common/Common.h"
 #include "Common/LogManager.h"
-#include "Common/Thread.h"
-#include "DolphinWX/Frame.h"
+
+class CFrame;
+class wxBoxSizer;
+class wxCheckBox;
+class wxChoice;
+class wxTextCtrl;
+class wxTimer;
+class wxTimerEvent;
 
 enum
 {
@@ -21,11 +39,6 @@ enum
 	IDM_SUBMITCMD
 };
 
-class wxTextCtrl;
-class wxCheckListBox;
-class wxString;
-class CFrame;
-
 // Uses multiple inheritance - only sane because LogListener is a pure virtual interface.
 class CLogWindow : public wxPanel, LogListener
 {
diff --git a/Source/Core/DolphinWX/Main.cpp b/Source/Core/DolphinWX/Main.cpp
index 97cded8..e80245e 100644
--- a/Source/Core/DolphinWX/Main.cpp
+++ b/Source/Core/DolphinWX/Main.cpp
@@ -2,22 +2,44 @@
 // Licensed under GPLv2
 // Refer to the license.txt file included.
 
+#include <cstdarg>
+#include <cstdio>
+#include <cstring>
+#include <mutex>
 #include <string>
-#include <vector>
+#include <utility>
+#include <wx/app.h>
+#include <wx/buffer.h>
+#include <wx/chartype.h>
+#include <wx/cmdline.h>
+#include <wx/defs.h>
+#include <wx/event.h>
+#include <wx/gdicmn.h>
+#include <wx/image.h>
+#include <wx/imagpng.h>
 #include <wx/intl.h>
-#include <wx/stdpaths.h>
+#include <wx/language.h>
+#include <wx/msgdlg.h>
+#include <wx/setup.h>
+#include <wx/string.h>
+#include <wx/timer.h>
+#include <wx/thread.h>
+#include <wx/translation.h>
+#include <wx/utils.h>
+#include <wx/window.h>
 
 #include "Common/Common.h"
 #include "Common/CommonPaths.h"
 #include "Common/CPUDetect.h"
-#include "Common/ExtendedTrace.h"
 #include "Common/FileUtil.h"
 #include "Common/IniFile.h"
+#include "Common/LogManager.h"
+#include "Common/Thread.h"
 
-#include "Core/BootManager.h"
 #include "Core/ConfigManager.h"
-#include "Core/Host.h"
+#include "Core/CoreParameter.h"
 #include "Core/HW/Wiimote.h"
+#include "Core/Movie.h"
 
 #include "DolphinWX/Frame.h"
 #include "DolphinWX/Globals.h"
@@ -34,6 +56,7 @@
 
 #ifdef _WIN32
 #include <shellapi.h>
+#include "Common/ExtendedTrace.h"
 
 #ifndef SM_XVIRTUALSCREEN
 #define SM_XVIRTUALSCREEN 76
@@ -54,6 +77,8 @@
 #import <AppKit/AppKit.h>
 #endif
 
+class wxFrame;
+
 // Nvidia drivers >= v302 will check if the application exports a global
 // variable named NvOptimusEnablement to know if it should run the app in high
 // performance graphics mode or using the IGP.
diff --git a/Source/Core/DolphinWX/Main.h b/Source/Core/DolphinWX/Main.h
index 3901e01..1e4b7c6 100644
--- a/Source/Core/DolphinWX/Main.h
+++ b/Source/Core/DolphinWX/Main.h
@@ -4,10 +4,18 @@
 
 #pragma once
 
-#include "DolphinWX/Frame.h"
+#include <wx/app.h>
+#include <wx/chartype.h>
+#include <wx/defs.h>
+#include <wx/event.h>
+#include <wx/string.h>
 
-// Define a new application
 class CFrame;
+class wxLocale;
+class wxTimer;
+class wxTimerEvent;
+
+// Define a new application
 class DolphinApp : public wxApp
 {
 public:
diff --git a/Source/Core/DolphinWX/MainNoGUI.cpp b/Source/Core/DolphinWX/MainNoGUI.cpp
index ac7941d..113d058 100644
--- a/Source/Core/DolphinWX/MainNoGUI.cpp
+++ b/Source/Core/DolphinWX/MainNoGUI.cpp
@@ -3,20 +3,18 @@
 // Refer to the license.txt file included.
 
 #include <cstdarg>
+#include <cstddef>
 #include <cstdio>
-#include <cstdlib>
+#include <cstring>
 #include <getopt.h>
 
 #include "Common/Common.h"
-#include "Common/CPUDetect.h"
-#include "Common/FileUtil.h"
 #include "Common/LogManager.h"
 #include "Common/Thread.h"
 
 #include "Core/BootManager.h"
 #include "Core/ConfigManager.h"
-#include "Core/Core.h"
-#include "Core/Host.h"
+#include "Core/CoreParameter.h"
 #include "Core/HW/Wiimote.h"
 #include "Core/PowerPC/PowerPC.h"
 
diff --git a/Source/Core/DolphinWX/MemcardManager.cpp b/Source/Core/DolphinWX/MemcardManager.cpp
index e7d2466..d35559f 100644
--- a/Source/Core/DolphinWX/MemcardManager.cpp
+++ b/Source/Core/DolphinWX/MemcardManager.cpp
@@ -2,9 +2,35 @@
 // Licensed under GPLv2
 // Refer to the license.txt file included.
 
+#include <cstring>
+#include <string>
+#include <wx/bitmap.h>
+#include <wx/button.h>
+#include <wx/chartype.h>
+#include <wx/defs.h>
+#include <wx/dialog.h>
+#include <wx/event.h>
+#include <wx/filedlg.h>
+#include <wx/filepicker.h>
+#include <wx/gdicmn.h>
+#include <wx/image.h>
+#include <wx/imaglist.h>
+#include <wx/listbase.h>
+#include <wx/menu.h>
+#include <wx/menuitem.h>
 #include <wx/mstream.h>
+#include <wx/sizer.h>
+#include <wx/stattext.h>
+#include <wx/string.h>
+#include <wx/translation.h>
+#include <wx/window.h>
+#include <wx/windowid.h>
 
 #include "Common/Common.h"
+#include "Common/FileUtil.h"
+#include "Common/IniFile.h"
+#include "Common/StringUtil.h"
+#include "Core/HW/GCMemcard.h"
 #include "DolphinWX/MemcardManager.h"
 #include "DolphinWX/WxUtils.h"
 
diff --git a/Source/Core/DolphinWX/MemcardManager.h b/Source/Core/DolphinWX/MemcardManager.h
index 775146f..c285736 100644
--- a/Source/Core/DolphinWX/MemcardManager.h
+++ b/Source/Core/DolphinWX/MemcardManager.h
@@ -4,18 +4,27 @@
 
 #pragma once
 
-#include <wx/filepicker.h>
-#include <wx/fontmap.h>
-#include <wx/imaglist.h>
+#include <string>
+#include <wx/chartype.h>
+#include <wx/defs.h>
+#include <wx/dialog.h>
+#include <wx/event.h>
+#include <wx/gdicmn.h>
 #include <wx/listctrl.h>
-#include <wx/sizer.h>
-#include <wx/statbmp.h>
-#include <wx/stattext.h>
-#include <wx/wx.h>
+#include <wx/string.h>
+#include <wx/toplevel.h>
+#include <wx/translation.h>
+#include <wx/windowid.h>
 
-#include "Common/FileUtil.h"
+#include "Common/Common.h"
 #include "Common/IniFile.h"
-#include "Core/HW/GCMemcard.h"
+
+class GCMemcard;
+class wxButton;
+class wxFileDirPickerEvent;
+class wxFilePickerCtrl;
+class wxStaticText;
+class wxWindow;
 
 #undef MEMCARD_MANAGER_STYLE
 #define MEMCARD_MANAGER_STYLE wxCAPTION | wxSYSTEM_MENU | wxDIALOG_NO_PARENT | wxCLOSE_BOX | wxRESIZE_BORDER | wxMAXIMIZE_BOX
diff --git a/Source/Core/DolphinWX/MemoryCards/WiiSaveCrypted.cpp b/Source/Core/DolphinWX/MemoryCards/WiiSaveCrypted.cpp
index 1703b79..7bbd2f0 100644
--- a/Source/Core/DolphinWX/MemoryCards/WiiSaveCrypted.cpp
+++ b/Source/Core/DolphinWX/MemoryCards/WiiSaveCrypted.cpp
@@ -7,12 +7,22 @@
 // Licensed under the terms of the GNU GPL, version 2
 // http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt
 
-#include <algorithm>
 #include <cinttypes>
-
+#include <cstddef>
+#include <cstdio>
+#include <cstring>
+#include <string>
+#include <vector>
+#include <polarssl/aes.h>
+#include <polarssl/md5.h>
+#include <polarssl/sha1.h>
+
+#include "Common/Common.h"
 #include "Common/FileUtil.h"
 #include "Common/MathUtil.h"
 #include "Common/NandPaths.h"
+#include "Common/StringUtil.h"
+#include "Common/Crypto/tools.h"
 #include "DolphinWX/MemoryCards/WiiSaveCrypted.h"
 
 static Common::replace_v replacements;
diff --git a/Source/Core/DolphinWX/MemoryCards/WiiSaveCrypted.h b/Source/Core/DolphinWX/MemoryCards/WiiSaveCrypted.h
index c2c85cb..583f9f4 100644
--- a/Source/Core/DolphinWX/MemoryCards/WiiSaveCrypted.h
+++ b/Source/Core/DolphinWX/MemoryCards/WiiSaveCrypted.h
@@ -4,11 +4,11 @@
 
 #pragma once
 
+#include <string>
+#include <vector>
 #include <polarssl/aes.h>
-#include <polarssl/md5.h>
 
-#include "Common/StringUtil.h"
-#include "Common/Crypto/tools.h"
+#include "Common/CommonTypes.h"
 
 // --- this is used for encrypted Wii save files
 
diff --git a/Source/Core/DolphinWX/NetWindow.cpp b/Source/Core/DolphinWX/NetWindow.cpp
index a5eadd1..82f0dd4 100644
--- a/Source/Core/DolphinWX/NetWindow.cpp
+++ b/Source/Core/DolphinWX/NetWindow.cpp
@@ -2,21 +2,51 @@
 // Licensed under GPLv2
 // Refer to the license.txt file included.
 
+#include <cstddef>
 #include <sstream>
 #include <string>
-
+#include <vector>
+#include <wx/anybutton.h>
+#include <wx/arrstr.h>
+#include <wx/button.h>
+#include <wx/chartype.h>
+#include <wx/checkbox.h>
+#include <wx/choice.h>
+#include <wx/defs.h>
+#include <wx/dialog.h>
+#include <wx/event.h>
+#include <wx/frame.h>
+#include <wx/gdicmn.h>
+#include <wx/listbox.h>
+#include <wx/notebook.h>
+#include <wx/panel.h>
+#include <wx/sizer.h>
+#include <wx/spinctrl.h>
+#include <wx/stattext.h>
+#include <wx/string.h>
+#include <wx/textctrl.h>
+#include <wx/translation.h>
+
+#include "Common/Common.h"
+#include "Common/FifoQueue.h"
 #include "Common/FileUtil.h"
 #include "Common/IniFile.h"
 
 #include "Core/ConfigManager.h"
-#include "Core/Core.h"
+#include "Core/CoreParameter.h"
 #include "Core/NetPlayClient.h"
+#include "Core/NetPlayProto.h"
 #include "Core/NetPlayServer.h"
+#include "Core/HW/EXI_Device.h"
 
 #include "DolphinWX/Frame.h"
+#include "DolphinWX/GameListCtrl.h"
+#include "DolphinWX/ISOFile.h"
 #include "DolphinWX/NetWindow.h"
 #include "DolphinWX/WxUtils.h"
 
+class wxWindow;
+
 #define NETPLAY_TITLEBAR  "Dolphin NetPlay"
 #define INITIAL_PAD_BUFFER_SIZE 20
 
diff --git a/Source/Core/DolphinWX/NetWindow.h b/Source/Core/DolphinWX/NetWindow.h
index b02f735..e9e7092 100644
--- a/Source/Core/DolphinWX/NetWindow.h
+++ b/Source/Core/DolphinWX/NetWindow.h
@@ -4,21 +4,24 @@
 
 #pragma once
 
-#include <queue>
 #include <string>
+#include <vector>
 #include <wx/dialog.h>
 #include <wx/event.h>
-#include <wx/gbsizer.h>
-#include <wx/listbox.h>
-#include <wx/notebook.h>
-#include <wx/sizer.h>
-#include <wx/spinctrl.h>
-#include <wx/wx.h>
-
-#include "Common/CommonTypes.h"
+#include <wx/frame.h>
+
 #include "Common/FifoQueue.h"
 #include "Core/NetPlayClient.h"
-#include "DolphinWX/GameListCtrl.h"
+#include "Core/NetPlayProto.h"
+
+class CGameListCtrl;
+class wxButton;
+class wxCheckBox;
+class wxChoice;
+class wxListBox;
+class wxString;
+class wxTextCtrl;
+class wxWindow;
 
 enum
 {
diff --git a/Source/Core/DolphinWX/PHackSettings.cpp b/Source/Core/DolphinWX/PHackSettings.cpp
index 086303e..c3cbc77 100644
--- a/Source/Core/DolphinWX/PHackSettings.cpp
+++ b/Source/Core/DolphinWX/PHackSettings.cpp
@@ -2,11 +2,30 @@
 // Licensed under GPLv2
 // Refer to the license.txt file included.
 
+#include <cstdio>
+#include <string>
+#include <wx/checkbox.h>
+#include <wx/choice.h>
+#include <wx/defs.h>
+#include <wx/dialog.h>
+#include <wx/event.h>
+#include <wx/gdicmn.h>
+#include <wx/sizer.h>
+#include <wx/stattext.h>
+#include <wx/string.h>
+#include <wx/textctrl.h>
+#include <wx/translation.h>
+#include <wx/windowid.h>
+
 #include "Common/CommonPaths.h"
-#include "Core/ConfigManager.h"
+#include "Common/FileUtil.h"
+#include "Common/IniFile.h"
+#include "DolphinWX/ISOProperties.h"
 #include "DolphinWX/PHackSettings.h"
 #include "DolphinWX/WxUtils.h"
 
+class wxWindow;
+
 extern PHackData PHack_Data;
 
 BEGIN_EVENT_TABLE(CPHackSettings, wxDialog)
diff --git a/Source/Core/DolphinWX/PHackSettings.h b/Source/Core/DolphinWX/PHackSettings.h
index 18965b7..76f562d 100644
--- a/Source/Core/DolphinWX/PHackSettings.h
+++ b/Source/Core/DolphinWX/PHackSettings.h
@@ -4,10 +4,19 @@
 
 #pragma once
 
-#include <wx/spinctrl.h>
-#include <wx/wx.h>
-
-#include "DolphinWX/ISOProperties.h"
+#include <wx/dialog.h>
+#include <wx/event.h>
+#include <wx/gdicmn.h>
+#include <wx/string.h>
+#include <wx/translation.h>
+#include <wx/windowid.h>
+
+#include "Common/IniFile.h"
+
+class wxCheckBox;
+class wxChoice;
+class wxTextCtrl;
+class wxWindow;
 
 class CPHackSettings : public wxDialog
 {
diff --git a/Source/Core/DolphinWX/PatchAddEdit.cpp b/Source/Core/DolphinWX/PatchAddEdit.cpp
index 09a77a5..ac72e67 100644
--- a/Source/Core/DolphinWX/PatchAddEdit.cpp
+++ b/Source/Core/DolphinWX/PatchAddEdit.cpp
@@ -2,9 +2,33 @@
 // Licensed under GPLv2
 // Refer to the license.txt file included.
 
+#include <string>
+#include <vector>
+#include <wx/arrstr.h>
+#include <wx/button.h>
+#include <wx/chartype.h>
+#include <wx/defs.h>
+#include <wx/dialog.h>
+#include <wx/event.h>
+#include <wx/gbsizer.h>
+#include <wx/gdicmn.h>
+#include <wx/radiobox.h>
+#include <wx/sizer.h>
+#include <wx/spinbutt.h>
+#include <wx/statbox.h>
+#include <wx/stattext.h>
+#include <wx/string.h>
+#include <wx/textctrl.h>
+#include <wx/translation.h>
+#include <wx/windowid.h>
+
+#include "Common/Common.h"
+#include "Core/PatchEngine.h"
 #include "DolphinWX/PatchAddEdit.h"
 #include "DolphinWX/WxUtils.h"
 
+class wxWindow;
+
 extern std::vector<PatchEngine::Patch> onFrame;
 
 BEGIN_EVENT_TABLE(CPatchAddEdit, wxDialog)
diff --git a/Source/Core/DolphinWX/PatchAddEdit.h b/Source/Core/DolphinWX/PatchAddEdit.h
index e57c80a..7763bc4 100644
--- a/Source/Core/DolphinWX/PatchAddEdit.h
+++ b/Source/Core/DolphinWX/PatchAddEdit.h
@@ -4,10 +4,23 @@
 
 #pragma once
 
-#include <wx/spinctrl.h>
-#include <wx/wx.h>
+#include <vector>
+#include <wx/dialog.h>
+#include <wx/event.h>
+#include <wx/gdicmn.h>
+#include <wx/string.h>
+#include <wx/translation.h>
+#include <wx/windowid.h>
 
-#include "DolphinWX/ISOProperties.h"
+#include "Core/PatchEngine.h"
+
+class wxButton;
+class wxRadioBox;
+class wxSpinButton;
+class wxSpinEvent;
+class wxStaticBoxSizer;
+class wxTextCtrl;
+class wxWindow;
 
 class CPatchAddEdit : public wxDialog
 {
diff --git a/Source/Core/DolphinWX/TASInputDlg.cpp b/Source/Core/DolphinWX/TASInputDlg.cpp
index 0ccb8bc..c619e5a 100644
--- a/Source/Core/DolphinWX/TASInputDlg.cpp
+++ b/Source/Core/DolphinWX/TASInputDlg.cpp
@@ -2,8 +2,29 @@
 // Licensed under GPLv2
 // Refer to the license.txt file included.
 
-#include "Core/Movie.h"
+#include <cstddef>
+#include <wx/bitmap.h>
+#include <wx/chartype.h>
+#include <wx/checkbox.h>
+#include <wx/dcmemory.h>
+#include <wx/defs.h>
+#include <wx/dialog.h>
+#include <wx/event.h>
+#include <wx/gdicmn.h>
+#include <wx/layout.h>
+#include <wx/sizer.h>
+#include <wx/slider.h>
+#include <wx/statbmp.h>
+#include <wx/string.h>
+#include <wx/textctrl.h>
+#include <wx/translation.h>
+#include <wx/validate.h>
+#include <wx/window.h>
+#include <wx/windowid.h>
+
+#include "Common/CommonTypes.h"
 #include "DolphinWX/TASInputDlg.h"
+#include "InputCommon/GCPadStatus.h"
 
 BEGIN_EVENT_TABLE(TASInputDlg, wxDialog)
 
diff --git a/Source/Core/DolphinWX/TASInputDlg.h b/Source/Core/DolphinWX/TASInputDlg.h
index 45d54ef..d06c3ec 100644
--- a/Source/Core/DolphinWX/TASInputDlg.h
+++ b/Source/Core/DolphinWX/TASInputDlg.h
@@ -4,12 +4,25 @@
 
 #pragma once
 
-#include <wx/wx.h>
+#include <wx/bitmap.h>
+#include <wx/dcmemory.h>
+#include <wx/dialog.h>
+#include <wx/event.h>
+#include <wx/gdicmn.h>
+#include <wx/string.h>
+#include <wx/toplevel.h>
+#include <wx/translation.h>
+#include <wx/windowid.h>
 
 #include "Common/Common.h"
-#include "Core/CoreParameter.h"
 #include "InputCommon/GCPadStatus.h"
 
+class wxCheckBox;
+class wxSlider;
+class wxStaticBitmap;
+class wxTextCtrl;
+class wxWindow;
+
 class TASInputDlg : public wxDialog
 {
 	public:
diff --git a/Source/Core/DolphinWX/UDPConfigDiag.cpp b/Source/Core/DolphinWX/UDPConfigDiag.cpp
index c01d913..01429fa 100644
--- a/Source/Core/DolphinWX/UDPConfigDiag.cpp
+++ b/Source/Core/DolphinWX/UDPConfigDiag.cpp
@@ -1,12 +1,20 @@
 #include <string>
+#include <wx/checkbox.h>
+#include <wx/dialog.h>
+#include <wx/defs.h>
+#include <wx/event.h>
+#include <wx/gdicmn.h>
+#include <wx/sizer.h>
+#include <wx/stattext.h>
+#include <wx/textctrl.h>
+#include <wx/translation.h>
 
-#include "Common/Common.h"
-#include "Common/IniFile.h"
 #include "DolphinWX/UDPConfigDiag.h"
 #include "DolphinWX/WxUtils.h"
-#include "InputCommon/ControllerEmu.h"
 #include "InputCommon/UDPWrapper.h"
 
+class wxWindow;
+
 UDPConfigDiag::UDPConfigDiag(wxWindow * const parent, UDPWrapper * _wrp) :
 	wxDialog(parent, -1, _("UDP Wiimote"), wxDefaultPosition, wxDefaultSize),
 	wrp(_wrp)
diff --git a/Source/Core/DolphinWX/UDPConfigDiag.h b/Source/Core/DolphinWX/UDPConfigDiag.h
index 97d5f04..5638599 100644
--- a/Source/Core/DolphinWX/UDPConfigDiag.h
+++ b/Source/Core/DolphinWX/UDPConfigDiag.h
@@ -1,17 +1,12 @@
 #pragma once
 
-#include <wx/button.h>
-#include <wx/checkbox.h>
-#include <wx/combobox.h>
-#include <wx/listbox.h>
-#include <wx/notebook.h>
-#include <wx/panel.h>
-#include <wx/spinctrl.h>
-#include <wx/stattext.h>
-#include <wx/textctrl.h>
-#include <wx/wx.h>
+#include <wx/dialog.h>
 
-#include "InputCommon/UDPWrapper.h"
+class UDPWrapper;
+class wxCheckBox;
+class wxCommandEvent;
+class wxTextCtrl;
+class wxWindow;
 
 class UDPConfigDiag : public wxDialog
 {
diff --git a/Source/Core/DolphinWX/VideoConfigDiag.cpp b/Source/Core/DolphinWX/VideoConfigDiag.cpp
index dfd958c..574eeef 100644
--- a/Source/Core/DolphinWX/VideoConfigDiag.cpp
+++ b/Source/Core/DolphinWX/VideoConfigDiag.cpp
@@ -1,11 +1,37 @@
-#include <wx/intl.h>
+#include <map>
+#include <string>
+#include <utility>
+#include <vector>
+#include <wx/arrstr.h>
+#include <wx/button.h>
+#include <wx/chartype.h>
+#include <wx/checkbox.h>
+#include <wx/choice.h>
+#include <wx/control.h>
+#include <wx/defs.h>
+#include <wx/dialog.h>
+#include <wx/event.h>
+#include <wx/gdicmn.h>
+#include <wx/notebook.h>
+#include <wx/panel.h>
+#include <wx/radiobut.h>
+#include <wx/sizer.h>
+#include <wx/stattext.h>
+#include <wx/slider.h>
+#include <wx/string.h>
+#include <wx/translation.h>
+#include <wx/window.h>
 
 #include "Common/FileUtil.h"
+#include "Common/SysConf.h"
+#include "Core/ConfigManager.h"
 #include "Core/Core.h"
+#include "Core/CoreParameter.h"
 #include "DolphinWX/Frame.h"
 #include "DolphinWX/VideoConfigDiag.h"
-#include "VideoCommon/TextureCacheBase.h"
-
+#include "DolphinWX/WxUtils.h"
+#include "VideoCommon/VideoBackendBase.h"
+#include "VideoCommon/VideoConfig.h"
 
 #ifdef __APPLE__
 #include <ApplicationServices/ApplicationServices.h>
diff --git a/Source/Core/DolphinWX/VideoConfigDiag.h b/Source/Core/DolphinWX/VideoConfigDiag.h
index fca4e13..c9f37cc 100644
--- a/Source/Core/DolphinWX/VideoConfigDiag.h
+++ b/Source/Core/DolphinWX/VideoConfigDiag.h
@@ -1,24 +1,34 @@
 #pragma once
 
+#include <cstddef>
 #include <map>
 #include <string>
 #include <vector>
-#include <wx/button.h>
 #include <wx/checkbox.h>
-#include <wx/combobox.h>
-#include <wx/notebook.h>
-#include <wx/panel.h>
+#include <wx/choice.h>
+#include <wx/defs.h>
+#include <wx/dialog.h>
+#include <wx/event.h>
+#include <wx/msgdlg.h>
+#include <wx/radiobut.h>
 #include <wx/spinctrl.h>
 #include <wx/stattext.h>
-#include <wx/textctrl.h>
-#include <wx/wx.h>
+#include <wx/string.h>
+#include <wx/translation.h>
+#include <wx/window.h>
 
-#include "Common/MsgHandler.h"
+#include "Common/CommonTypes.h"
+#include "Common/SysConf.h"
 #include "Core/ConfigManager.h"
-#include "Core/Core.h"
+#include "Core/CoreParameter.h"
 #include "DolphinWX/WxUtils.h"
+#include "VideoCommon/VideoBackendBase.h"
 #include "VideoCommon/VideoConfig.h"
 
+class wxBoxSizer;
+class wxControl;
+class wxPanel;
+
 template <typename W>
 class BoolSetting : public W
 {
diff --git a/Source/Core/DolphinWX/WXInputBase.cpp b/Source/Core/DolphinWX/WXInputBase.cpp
index 22a1d5f..979c941 100644
--- a/Source/Core/DolphinWX/WXInputBase.cpp
+++ b/Source/Core/DolphinWX/WXInputBase.cpp
@@ -2,6 +2,11 @@
 // Licensed under GPLv2
 // Refer to the license.txt file included.
 
+#include <wx/chartype.h>
+#include <wx/defs.h>
+#include <wx/string.h>
+#include <wx/translation.h>
+
 #include "DolphinWX/WXInputBase.h"
 
 namespace InputCommon
diff --git a/Source/Core/DolphinWX/WXInputBase.h b/Source/Core/DolphinWX/WXInputBase.h
index d47e2f3..ebc151d 100644
--- a/Source/Core/DolphinWX/WXInputBase.h
+++ b/Source/Core/DolphinWX/WXInputBase.h
@@ -4,9 +4,8 @@
 
 #pragma once
 
-#include "Common/Common.h"
 #if defined(HAVE_WX) && HAVE_WX
-#include <wx/wx.h>
+#include <wx/string.h>
 #endif
 
 namespace InputCommon
diff --git a/Source/Core/DolphinWX/WiimoteConfigDiag.cpp b/Source/Core/DolphinWX/WiimoteConfigDiag.cpp
index 2de3bf0..e366567 100644
--- a/Source/Core/DolphinWX/WiimoteConfigDiag.cpp
+++ b/Source/Core/DolphinWX/WiimoteConfigDiag.cpp
@@ -1,9 +1,35 @@
+#include <map>
+#include <string>
+#include <utility>
+#include <wx/button.h>
+#include <wx/checkbox.h>
+#include <wx/choice.h>
+#include <wx/defs.h>
+#include <wx/dialog.h>
+#include <wx/event.h>
+#include <wx/gdicmn.h>
+#include <wx/sizer.h>
+#include <wx/slider.h>
+#include <wx/stattext.h>
+#include <wx/string.h>
+#include <wx/translation.h>
+#include <wx/window.h>
+#include <wx/windowid.h>
+
+#include "Common/Common.h"
+#include "Common/FileUtil.h"
+#include "Common/IniFile.h"
+#include "Common/SysConf.h"
+#include "Core/ConfigManager.h"
+#include "Core/Core.h"
 #include "Core/NetPlayProto.h"
 #include "Core/HW/Wiimote.h"
 #include "Core/HW/WiimoteReal/WiimoteReal.h"
-#include "DolphinWX/Frame.h"
+#include "DolphinWX/InputConfigDiag.h"
 #include "DolphinWX/WiimoteConfigDiag.h"
 
+class InputPlugin;
+
 WiimoteConfigDiag::WiimoteConfigDiag(wxWindow* const parent, InputPlugin& plugin)
 	: wxDialog(parent, -1, _("Dolphin Wiimote Configuration"), wxDefaultPosition, wxDefaultSize)
 	, m_plugin(plugin)
diff --git a/Source/Core/DolphinWX/WiimoteConfigDiag.h b/Source/Core/DolphinWX/WiimoteConfigDiag.h
index 5ae4d88..e36ba95 100644
--- a/Source/Core/DolphinWX/WiimoteConfigDiag.h
+++ b/Source/Core/DolphinWX/WiimoteConfigDiag.h
@@ -1,20 +1,17 @@
 #pragma once
 
 #include <map>
-#include <wx/button.h>
-#include <wx/checkbox.h>
-#include <wx/combobox.h>
-#include <wx/listbox.h>
-#include <wx/notebook.h>
-#include <wx/panel.h>
-#include <wx/spinctrl.h>
-#include <wx/stattext.h>
-#include <wx/textctrl.h>
-#include <wx/wx.h>
+#include <wx/dialog.h>
+#include <wx/event.h>
+#include <wx/windowid.h>
 
+#include "Common/SysConf.h"
 #include "Core/ConfigManager.h"
 #include "Core/HW/Wiimote.h"
-#include "DolphinWX/InputConfigDiag.h"
+
+class InputPlugin;
+class wxButton;
+class wxWindow;
 
 class WiimoteConfigDiag : public wxDialog
 {
diff --git a/Source/Core/DolphinWX/WxUtils.cpp b/Source/Core/DolphinWX/WxUtils.cpp
index a7ad6d4..fa7d91e 100644
--- a/Source/Core/DolphinWX/WxUtils.cpp
+++ b/Source/Core/DolphinWX/WxUtils.cpp
@@ -2,10 +2,15 @@
 // Licensed under GPLv2
 // Refer to the license.txt file included.
 
+#include <string>
+#include <wx/bitmap.h>
+#include <wx/chartype.h>
+#include <wx/gdicmn.h>
+#include <wx/image.h>
+#include <wx/mstream.h>
 #include <wx/string.h>
-#include <wx/wx.h>
+#include <wx/utils.h>
 
-#include "Common/Common.h"
 #include "DolphinWX/WxUtils.h"
 
 #ifdef __APPLE__
@@ -57,6 +62,12 @@ double GetCurrentBitmapLogicalScale()
 	return 1.0;
 }
 
+wxBitmap _wxGetBitmapFromMemory(const unsigned char* data, int length)
+{
+	wxMemoryInputStream is(data, length);
+	return(wxBitmap(wxImage(is, wxBITMAP_TYPE_ANY, -1), -1));
+}
+
 }  // namespace
 
 std::string WxStrToStr(const wxString& str)
diff --git a/Source/Core/DolphinWX/WxUtils.h b/Source/Core/DolphinWX/WxUtils.h
index a3bd1ec..f4a77e9 100644
--- a/Source/Core/DolphinWX/WxUtils.h
+++ b/Source/Core/DolphinWX/WxUtils.h
@@ -7,6 +7,11 @@
 #include <string>
 #include <wx/string.h>
 
+class wxBitmap;
+
+// A shortcut to access the bitmaps
+#define wxGetBitmapFromMemory(name) WxUtils::_wxGetBitmapFromMemory(name, sizeof(name))
+
 namespace WxUtils
 {
 
@@ -18,6 +23,8 @@ void Explore(const char *path);
 
 double GetCurrentBitmapLogicalScale();
 
+wxBitmap _wxGetBitmapFromMemory(const unsigned char* data, int length);
+
 }  // namespace
 
 std::string WxStrToStr(const wxString& str);
diff --git a/Source/Core/DolphinWX/X11Utils.cpp b/Source/Core/DolphinWX/X11Utils.cpp
index 8b9971d..2a5f40b 100644
--- a/Source/Core/DolphinWX/X11Utils.cpp
+++ b/Source/Core/DolphinWX/X11Utils.cpp
@@ -6,6 +6,10 @@
 #include <unistd.h>
 #include <sys/wait.h>
 
+#include "Common/Log.h"
+#include "Core/ConfigManager.h"
+#include "Core/Core.h"
+#include "Core/CoreParameter.h"
 #include "DolphinWX/X11Utils.h"
 
 extern char **environ;
diff --git a/Source/Core/DolphinWX/X11Utils.h b/Source/Core/DolphinWX/X11Utils.h
index 8139e26..55e7e72 100644
--- a/Source/Core/DolphinWX/X11Utils.h
+++ b/Source/Core/DolphinWX/X11Utils.h
@@ -15,18 +15,15 @@
 #if defined(HAVE_WX) && HAVE_WX
 #include <gtk/gtk.h>
 #include <gdk/gdkx.h>
-#include <wx/wx.h>
+#include <wx/arrstr.h>
 #endif
 
 #if defined(HAVE_XRANDR) && HAVE_XRANDR
 #include <X11/extensions/Xrandr.h>
 #endif
+#include <X11/X.h>
 #include <X11/Xlib.h>
 
-#include "Common/Common.h"
-#include "Core/ConfigManager.h"
-#include "Core/Core.h"
-
 
 // EWMH state actions, see
 // http://freedesktop.org/wiki/Specifications/wm-spec?action=show&redirect=Standards%2Fwm-spec
diff --git a/Source/Core/VideoBackends/Software/SWCommandProcessor.cpp b/Source/Core/VideoBackends/Software/SWCommandProcessor.cpp
index bf37b47..d8288ad 100644
--- a/Source/Core/VideoBackends/Software/SWCommandProcessor.cpp
+++ b/Source/Core/VideoBackends/Software/SWCommandProcessor.cpp
@@ -5,6 +5,7 @@
 #include "Common/Atomic.h"
 #include "Common/ChunkFile.h"
 #include "Common/Common.h"
+#include "Common/FPURoundMode.h"
 #include "Common/MathUtil.h"
 #include "Common/Thread.h"
 
diff --git a/Source/Core/VideoCommon/Fifo.cpp b/Source/Core/VideoCommon/Fifo.cpp
index 178a8c6..9e3f615 100644
--- a/Source/Core/VideoCommon/Fifo.cpp
+++ b/Source/Core/VideoCommon/Fifo.cpp
@@ -4,6 +4,7 @@
 
 #include "Common/Atomic.h"
 #include "Common/ChunkFile.h"
+#include "Common/FPURoundMode.h"
 #include "Common/MemoryUtil.h"
 #include "Common/Thread.h"
 
diff --git a/Tools/find-includes-cycles.py b/Tools/find-includes-cycles.py
new file mode 100755
index 0000000..c4139cd
--- /dev/null
+++ b/Tools/find-includes-cycles.py
@@ -0,0 +1,80 @@
+#! /usr/bin/env python
+
+'''
+Run this script from Source/Core/ to find all the #include cycles.
+'''
+
+import subprocess
+
+def get_local_includes_for(path):
+    lines = open(path).read().split('\n')
+    includes = [l.strip() for l in lines if l.strip().startswith('#include')]
+    return [i.split()[1][1:-1] for i in includes if '"' in i.split()[1]]
+
+def find_all_files():
+    '''Could probably use os.walk, but meh.'''
+    f = subprocess.check_output(['find', '.', '-name', '*.h'],
+                                universal_newlines=True).strip().split('\n')
+    return [p[2:] for p in f]
+
+def make_include_graph():
+    return { f: get_local_includes_for(f) for f in find_all_files() }
+
+def strongly_connected_components(graph):
+    """
+    Tarjan's Algorithm (named for its discoverer, Robert Tarjan) is a graph theory algorithm
+    for finding the strongly connected components of a graph.
+
+    Based on: http://en.wikipedia.org/wiki/Tarjan%27s_strongly_connected_components_algorithm
+    """
+
+    index_counter = [0]
+    stack = []
+    lowlinks = {}
+    index = {}
+    result = []
+
+    def strongconnect(node):
+        # set the depth index for this node to the smallest unused index
+        index[node] = index_counter[0]
+        lowlinks[node] = index_counter[0]
+        index_counter[0] += 1
+        stack.append(node)
+
+        # Consider successors of `node`
+        try:
+            successors = graph[node]
+        except:
+            successors = []
+        for successor in successors:
+            if successor not in lowlinks:
+                # Successor has not yet been visited; recurse on it
+                strongconnect(successor)
+                lowlinks[node] = min(lowlinks[node],lowlinks[successor])
+            elif successor in stack:
+                # the successor is in the stack and hence in the current strongly connected component (SCC)
+                lowlinks[node] = min(lowlinks[node],index[successor])
+
+        # If `node` is a root node, pop the stack and generate an SCC
+        if lowlinks[node] == index[node]:
+            connected_component = []
+
+            while True:
+                successor = stack.pop()
+                connected_component.append(successor)
+                if successor == node: break
+            component = tuple(connected_component)
+            # storing the result
+            result.append(component)
+
+    for node in graph:
+        if node not in lowlinks:
+            strongconnect(node)
+
+    return result
+
+if __name__ == '__main__':
+    comp = strongly_connected_components(make_include_graph())
+    for c in comp:
+        if len(c) != 1:
+            print(c)