diff --git a/aegisub/build/Aegisub/Aegisub.vcxproj b/aegisub/build/Aegisub/Aegisub.vcxproj
index 8113f460287c96eeb61e33d13307aab858a4fda0..524ef41e612b9c4b4c59454c965b735b8487a6f2 100644
--- a/aegisub/build/Aegisub/Aegisub.vcxproj
+++ b/aegisub/build/Aegisub/Aegisub.vcxproj
@@ -255,6 +255,7 @@
     <ClInclude Include="$(SrcDir)visual_tool_scale.h" />
     <ClInclude Include="$(SrcDir)visual_tool_vector_clip.h" />
     <ClInclude Include="$(SrcDir)ass_info.h" />
+    <ClInclude Include="$(SrcDir)options.h" />
   </ItemGroup>
   <ItemGroup>
     <ClCompile Include="$(SrcDir)aegisublocale.cpp" />
diff --git a/aegisub/build/Aegisub/Aegisub.vcxproj.filters b/aegisub/build/Aegisub/Aegisub.vcxproj.filters
index b475780c33fa248aa0953ef0abce0a80885cc18d..9dc72df3f776454433c77b98e6726a50cbfd368c 100644
--- a/aegisub/build/Aegisub/Aegisub.vcxproj.filters
+++ b/aegisub/build/Aegisub/Aegisub.vcxproj.filters
@@ -682,6 +682,10 @@
     <ClInclude Include="$(SrcDir)ass_info.h">
       <Filter>ASS</Filter>
     </ClInclude>
+    <ClInclude Include="$(SrcDir)include\aegisub\hotkey.h" />
+    <ClInclude Include="$(SrcDir)options.h">
+      <Filter>Preferences</Filter>
+    </ClInclude>
   </ItemGroup>
   <ItemGroup>
     <ClCompile Include="$(SrcDir)ass_dialogue.cpp">
diff --git a/aegisub/src/ass_file.cpp b/aegisub/src/ass_file.cpp
index eba59cc7e71adb50d3c6f246a337394c599570f2..4bdc90ffefa6becd61ba1a3c06c7963fdc089573 100644
--- a/aegisub/src/ass_file.cpp
+++ b/aegisub/src/ass_file.cpp
@@ -50,7 +50,7 @@
 #include "ass_info.h"
 #include "ass_style.h"
 #include "compat.h"
-#include "main.h"
+#include "options.h"
 #include "standard_paths.h"
 #include "subtitle_format.h"
 #include "text_file_reader.h"
diff --git a/aegisub/src/audio_box.cpp b/aegisub/src/audio_box.cpp
index 9a9a2860c6905c37d03b64e56b178f380e73af40..56a94402de1a9f20256862d0ec87c6ec902a5654 100644
--- a/aegisub/src/audio_box.cpp
+++ b/aegisub/src/audio_box.cpp
@@ -62,7 +62,7 @@
 #include "audio_timing.h"
 #include "command/command.h"
 #include "libresrc/libresrc.h"
-#include "main.h"
+#include "options.h"
 #include "toggle_bitmap.h"
 #include "selection_controller.h"
 #include "utils.h"
diff --git a/aegisub/src/audio_colorscheme.cpp b/aegisub/src/audio_colorscheme.cpp
index d849c68d9f51bf19823e2f48fda9dd29305be0cb..c0666793d457383d6040d87340c8bac7676e0224 100644
--- a/aegisub/src/audio_colorscheme.cpp
+++ b/aegisub/src/audio_colorscheme.cpp
@@ -40,7 +40,7 @@
 
 #include "audio_rendering_style.h"
 #include "colorspace.h"
-#include "main.h"
+#include "options.h"
 
 #include <libaegisub/exception.h>
 
diff --git a/aegisub/src/audio_controller.cpp b/aegisub/src/audio_controller.cpp
index b3fa9c03f104807a99c12e15946d72321c0f489e..446fc626b0248c1867d34537d758b72dd88aabcc 100644
--- a/aegisub/src/audio_controller.cpp
+++ b/aegisub/src/audio_controller.cpp
@@ -49,7 +49,7 @@
 #include "include/aegisub/audio_provider.h"
 #include "include/aegisub/context.h"
 #include "pen.h"
-#include "main.h"
+#include "options.h"
 #include "selection_controller.h"
 #include "standard_paths.h"
 #include "utils.h"
diff --git a/aegisub/src/audio_display.cpp b/aegisub/src/audio_display.cpp
index be336185665e37c03312033c57194a6aad0a2d87..5de97051b418764b938e9ecf4c3dcba80922aaa3 100644
--- a/aegisub/src/audio_display.cpp
+++ b/aegisub/src/audio_display.cpp
@@ -54,7 +54,7 @@
 #include "compat.h"
 #include "include/aegisub/context.h"
 #include "include/aegisub/hotkey.h"
-#include "main.h"
+#include "options.h"
 #include "selection_controller.h"
 #include "utils.h"
 #include "video_context.h"
diff --git a/aegisub/src/audio_karaoke.cpp b/aegisub/src/audio_karaoke.cpp
index 546fbd2de8e255331dc44d378f026c7d364a9f0d..4fd1720c9491a907afcc44d60ebb66d4ad93cbb3 100644
--- a/aegisub/src/audio_karaoke.cpp
+++ b/aegisub/src/audio_karaoke.cpp
@@ -36,7 +36,7 @@
 #include "audio_timing.h"
 #include "compat.h"
 #include "libresrc/libresrc.h"
-#include "main.h"
+#include "options.h"
 #include "selection_controller.h"
 #include "utils.h"
 
diff --git a/aegisub/src/audio_marker.cpp b/aegisub/src/audio_marker.cpp
index 58d9e05e7e5b4eed9a2cbb8874028a1787e858f6..4e0caebc52f5088565bbc3a5bac21f27e961fb23 100644
--- a/aegisub/src/audio_marker.cpp
+++ b/aegisub/src/audio_marker.cpp
@@ -24,7 +24,7 @@
 #include "audio_marker.h"
 
 #include "include/aegisub/context.h"
-#include "main.h"
+#include "options.h"
 #include "pen.h"
 #include "video_context.h"
 
diff --git a/aegisub/src/audio_player.cpp b/aegisub/src/audio_player.cpp
index 8e2b90eaac65b6854f572bef1669034c994858d8..3d27ff9c767871111b5b4fa0855f56f08be95714 100644
--- a/aegisub/src/audio_player.cpp
+++ b/aegisub/src/audio_player.cpp
@@ -45,7 +45,7 @@
 
 #include "audio_controller.h"
 #include "compat.h"
-#include "main.h"
+#include "options.h"
 
 AudioPlayer::AudioPlayer(AudioProvider *provider)
 : provider(provider)
diff --git a/aegisub/src/audio_player_alsa.cpp b/aegisub/src/audio_player_alsa.cpp
index b142cbdafeb39aa4f51eac9917b7fa55fb46e486..c8f0ed5fd5c7d237e36899661e31e2d85f943da9 100644
--- a/aegisub/src/audio_player_alsa.cpp
+++ b/aegisub/src/audio_player_alsa.cpp
@@ -44,7 +44,7 @@
 #include "include/aegisub/audio_provider.h"
 #include "compat.h"
 #include "frame_main.h"
-#include "main.h"
+#include "options.h"
 
 #include <algorithm>
 
diff --git a/aegisub/src/audio_player_dsound2.cpp b/aegisub/src/audio_player_dsound2.cpp
index 51a086ef72a07774ccedeb147655c0a7c46b09e2..379c03a44b7eda7ae2ff2c2d99c1473e17de5c6d 100644
--- a/aegisub/src/audio_player_dsound2.cpp
+++ b/aegisub/src/audio_player_dsound2.cpp
@@ -35,7 +35,6 @@
 #include "config.h"
 
 #ifdef WITH_DIRECTSOUND
-
 #include <mmsystem.h>
 #include <process.h>
 #include <dsound.h>
@@ -48,6 +47,7 @@
 #include "include/aegisub/audio_provider.h"
 #include "frame_main.h"
 #include "main.h"
+#include "options.h"
 #include "utils.h"
 
 /// @brief RAII support class to init and de-init the COM library
diff --git a/aegisub/src/audio_player_oss.cpp b/aegisub/src/audio_player_oss.cpp
index 165d4d7b62de3534f1dec1a4c124a439e134d035..1c2d89ca46f3419bdd131f5b2bf461f20140fac2 100644
--- a/aegisub/src/audio_player_oss.cpp
+++ b/aegisub/src/audio_player_oss.cpp
@@ -43,7 +43,7 @@
 #include "audio_controller.h"
 #include "compat.h"
 #include "include/aegisub/audio_provider.h"
-#include "main.h"
+#include "options.h"
 #include "utils.h"
 
 DEFINE_SIMPLE_EXCEPTION(OSSError, agi::AudioPlayerOpenError, "audio/player/open/oss")
diff --git a/aegisub/src/audio_player_portaudio.cpp b/aegisub/src/audio_player_portaudio.cpp
index 63a40fb7e4e5ec8bb3be5169547da35a25431e81..27dbb5c21262982d110340a0bd52c1726a61dc20 100644
--- a/aegisub/src/audio_player_portaudio.cpp
+++ b/aegisub/src/audio_player_portaudio.cpp
@@ -44,7 +44,7 @@
 #include "audio_controller.h"
 #include "compat.h"
 #include "include/aegisub/audio_provider.h"
-#include "main.h"
+#include "options.h"
 #include "utils.h"
 
 DEFINE_SIMPLE_EXCEPTION(PortAudioError, agi::AudioPlayerOpenError, "audio/player/open/portaudio")
diff --git a/aegisub/src/audio_provider.cpp b/aegisub/src/audio_provider.cpp
index ae2c7c5fefe16749e9ab1138c6048da6f28074d2..d9e7d2b5eb79eb26f012a2bca2ba1fc2e90cba37 100644
--- a/aegisub/src/audio_provider.cpp
+++ b/aegisub/src/audio_provider.cpp
@@ -51,6 +51,7 @@
 #include "dialog_progress.h"
 #include "frame_main.h"
 #include "main.h"
+#include "options.h"
 #include "utils.h"
 
 #include <libaegisub/log.h>
diff --git a/aegisub/src/audio_provider_avs.cpp b/aegisub/src/audio_provider_avs.cpp
index 11354127eb5e715acb83e3bb3876ffafaccc2987..dd3178f65496c6742a5789397b3a00c42acf73ce 100644
--- a/aegisub/src/audio_provider_avs.cpp
+++ b/aegisub/src/audio_provider_avs.cpp
@@ -40,7 +40,7 @@
 #include "audio_controller.h"
 #include "charset_conv.h"
 #include "compat.h"
-#include "main.h"
+#include "options.h"
 #include "standard_paths.h"
 #include "utils.h"
 
diff --git a/aegisub/src/audio_provider_ffmpegsource.cpp b/aegisub/src/audio_provider_ffmpegsource.cpp
index b843e16afa2dd2b7f60eeda63271b6d3b7eef592..79e07c0728df05e8e964d050f620953a0d34b2bf 100644
--- a/aegisub/src/audio_provider_ffmpegsource.cpp
+++ b/aegisub/src/audio_provider_ffmpegsource.cpp
@@ -46,7 +46,7 @@
 
 #include "audio_controller.h"
 #include "compat.h"
-#include "main.h"
+#include "options.h"
 
 /// @brief Constructor
 /// @param filename The filename to open
diff --git a/aegisub/src/audio_provider_hd.cpp b/aegisub/src/audio_provider_hd.cpp
index 72fce2df654ce819ec77612e2b416ed4e2b770ca..82553d6b929e3caecbe198d7885c4cdd50a9b2db 100644
--- a/aegisub/src/audio_provider_hd.cpp
+++ b/aegisub/src/audio_provider_hd.cpp
@@ -45,7 +45,7 @@
 #include "audio_controller.h"
 #include "audio_provider_pcm.h"
 #include "compat.h"
-#include "main.h"
+#include "options.h"
 #include "standard_paths.h"
 #include "utils.h"
 
diff --git a/aegisub/src/audio_provider_ram.cpp b/aegisub/src/audio_provider_ram.cpp
index d36667a38c80c57f8db48674308b8f2c43ebf55c..2e4cb79d8a8345df50c034d22bcd3144c5ae70b1 100644
--- a/aegisub/src/audio_provider_ram.cpp
+++ b/aegisub/src/audio_provider_ram.cpp
@@ -38,7 +38,7 @@
 
 #include "audio_controller.h"
 #include "compat.h"
-#include "main.h"
+#include "options.h"
 #include "utils.h"
 
 #include <libaegisub/background_runner.h>
diff --git a/aegisub/src/audio_renderer_waveform.cpp b/aegisub/src/audio_renderer_waveform.cpp
index 736049bd427fa8009433b6db840253bebea3c8d7..103970d977a73e7283a2797afbb9d45cda598d73 100644
--- a/aegisub/src/audio_renderer_waveform.cpp
+++ b/aegisub/src/audio_renderer_waveform.cpp
@@ -44,7 +44,7 @@
 #include "block_cache.h"
 #include "colorspace.h"
 #include "include/aegisub/audio_provider.h"
-#include "main.h"
+#include "options.h"
 
 enum {
 	/// Only render the peaks
diff --git a/aegisub/src/audio_timing_dialogue.cpp b/aegisub/src/audio_timing_dialogue.cpp
index 22bd500c3ef5d92bfc1a3d2ceb418dbc17e64f18..e68ac2bffe6f409585aabfaea5b2b6f2b48ecf86 100644
--- a/aegisub/src/audio_timing_dialogue.cpp
+++ b/aegisub/src/audio_timing_dialogue.cpp
@@ -42,7 +42,7 @@
 #include "audio_timing.h"
 #include "command/command.h"
 #include "include/aegisub/context.h"
-#include "main.h"
+#include "options.h"
 #include "pen.h"
 #include "selection_controller.h"
 #include "utils.h"
diff --git a/aegisub/src/audio_timing_karaoke.cpp b/aegisub/src/audio_timing_karaoke.cpp
index 5b3b725eaabbdb94eddaacd3ec4197ea12a8c9cd..8df22b3fbb6683884b34cdd4c4ed96b1c0be5004 100644
--- a/aegisub/src/audio_timing_karaoke.cpp
+++ b/aegisub/src/audio_timing_karaoke.cpp
@@ -31,7 +31,7 @@
 #include "audio_timing.h"
 #include "compat.h"
 #include "include/aegisub/context.h"
-#include "main.h"
+#include "options.h"
 #include "pen.h"
 #include "utils.h"
 
diff --git a/aegisub/src/auto4_base.cpp b/aegisub/src/auto4_base.cpp
index 01d5fa34181793ed1528c4f98bda69b611ef3bf5..9345fb1e4344efa9ce0583a24139560852aa8a40 100644
--- a/aegisub/src/auto4_base.cpp
+++ b/aegisub/src/auto4_base.cpp
@@ -67,7 +67,7 @@
 #include "compat.h"
 #include "dialog_progress.h"
 #include "include/aegisub/context.h"
-#include "main.h"
+#include "options.h"
 #include "standard_paths.h"
 #include "string_codec.h"
 #include "subtitle_format.h"
diff --git a/aegisub/src/avisynth_wrap.cpp b/aegisub/src/avisynth_wrap.cpp
index 7472b43eb1351d6f6af82d0ec27a2033460dc1cb..bd8331db26f86ee0c57473259a4cb9c11124d983 100644
--- a/aegisub/src/avisynth_wrap.cpp
+++ b/aegisub/src/avisynth_wrap.cpp
@@ -38,7 +38,7 @@
 #include "avisynth_wrap.h"
 
 #include "avisynth.h"
-#include "main.h"
+#include "options.h"
 
 // Allocate storage for and initialise static members
 namespace {
diff --git a/aegisub/src/base_grid.cpp b/aegisub/src/base_grid.cpp
index 6270aefc81876fc155f25667a484e26254a00ff6..d60d827e5a178f1845bdfeb57ee5e8ee66b5d547 100644
--- a/aegisub/src/base_grid.cpp
+++ b/aegisub/src/base_grid.cpp
@@ -56,7 +56,7 @@
 #include "audio_box.h"
 #include "compat.h"
 #include "frame_main.h"
-#include "main.h"
+#include "options.h"
 #include "utils.h"
 #include "video_context.h"
 #include "video_slider.h"
diff --git a/aegisub/src/command/app.cpp b/aegisub/src/command/app.cpp
index dc52271799d921726dafc45cc59c79fbfe7fe708..1af80f47395bbd033225974b647a51bb34141e59 100644
--- a/aegisub/src/command/app.cpp
+++ b/aegisub/src/command/app.cpp
@@ -42,17 +42,17 @@
 
 #include <libaegisub/log.h>
 
-#include "../include/aegisub/context.h"
-#include "../main.h"
-
 #include "../audio_controller.h"
 #include "../compat.h"
 #include "../dialog_about.h"
 #include "../dialog_detached_video.h"
-#include "../dialog_manager.h"
 #include "../dialog_log.h"
+#include "../dialog_manager.h"
 #include "../dialog_version_check.h"
 #include "../frame_main.h"
+#include "../include/aegisub/context.h"
+#include "../main.h"
+#include "../options.h"
 #include "../preferences.h"
 #include "../utils.h"
 #include "../video_context.h"
diff --git a/aegisub/src/command/audio.cpp b/aegisub/src/command/audio.cpp
index 107514cd95045734bc81a02b143dfa8a683284b4..00c9402f3772dc074b9da319b508cbb01dc34f65 100644
--- a/aegisub/src/command/audio.cpp
+++ b/aegisub/src/command/audio.cpp
@@ -49,7 +49,7 @@
 #include "../audio_timing.h"
 #include "../compat.h"
 #include "../include/aegisub/context.h"
-#include "../main.h"
+#include "../options.h"
 #include "../selection_controller.h"
 #include "../video_context.h"
 
diff --git a/aegisub/src/command/automation.cpp b/aegisub/src/command/automation.cpp
index 2e4b5a840af10212af88bc5260d4816267cf3214..6d7e1714806e2118104b7520e7bfd8ec0d6dd5e3 100644
--- a/aegisub/src/command/automation.cpp
+++ b/aegisub/src/command/automation.cpp
@@ -39,13 +39,14 @@
 
 #include "command.h"
 
-#include "../main.h"
-#include "../include/aegisub/context.h"
+#include "../auto4_base.h"
 #include "../dialog_automation.h"
 #include "../dialog_manager.h"
-#include "../auto4_base.h"
-#include "../video_context.h"
 #include "../frame_main.h"
+#include "../include/aegisub/context.h"
+#include "../main.h"
+#include "../options.h"
+#include "../video_context.h"
 
 namespace {
 	using cmd::Command;
diff --git a/aegisub/src/command/edit.cpp b/aegisub/src/command/edit.cpp
index 9b5a5979cfb01d7497b536d3c8ea1665904381fe..8268b20b71ea87bb62a1abfde54eb9862def27a5 100644
--- a/aegisub/src/command/edit.cpp
+++ b/aegisub/src/command/edit.cpp
@@ -52,8 +52,8 @@
 #include "../dialog_colorpicker.h"
 #include "../dialog_paste_over.h"
 #include "../dialog_search_replace.h"
-#include "../main.h"
 #include "../include/aegisub/context.h"
+#include "../options.h"
 #include "../subs_edit_ctrl.h"
 #include "../subs_grid.h"
 #include "../text_selection_controller.h"
diff --git a/aegisub/src/command/grid.cpp b/aegisub/src/command/grid.cpp
index d0600e8d87eca56b7a9c230be48fa942da69c475..dffb8bb9d9c83947e6952da328d8f67e491c5220 100644
--- a/aegisub/src/command/grid.cpp
+++ b/aegisub/src/command/grid.cpp
@@ -42,9 +42,10 @@
 #include "../ass_file.h"
 #include "../audio_controller.h"
 #include "../audio_timing.h"
+#include "../frame_main.h"
 #include "../include/aegisub/context.h"
 #include "../main.h"
-#include "../frame_main.h"
+#include "../options.h"
 #include "../selection_controller.h"
 #include "../utils.h"
 
diff --git a/aegisub/src/command/help.cpp b/aegisub/src/command/help.cpp
index 1ba03e11f0436f52b329f48d5548e3dc1c48bdf2..c54c386c13309c05f4b67d6807d2672f5ba6c405 100644
--- a/aegisub/src/command/help.cpp
+++ b/aegisub/src/command/help.cpp
@@ -41,10 +41,10 @@
 #include <libaegisub/util_osx.h>
 
 #include "command.h"
-#include "../include/aegisub/context.h"
 
-#include "../help_button.h" // help_contents
-#include "../main.h"
+#include "../help_button.h"
+#include "../include/aegisub/context.h"
+#include "../options.h"
 
 namespace {
 	using cmd::Command;
diff --git a/aegisub/src/command/keyframe.cpp b/aegisub/src/command/keyframe.cpp
index 9245ae6fc3ec70e8b7108082bb951bae2b79eecb..43f700ec30d429256edd2b8c88463769201c746a 100644
--- a/aegisub/src/command/keyframe.cpp
+++ b/aegisub/src/command/keyframe.cpp
@@ -41,9 +41,9 @@
 
 #include "command.h"
 
-#include "../include/aegisub/context.h"
-#include "../main.h"
 #include "../compat.h"
+#include "../include/aegisub/context.h"
+#include "../options.h"
 #include "../video_context.h"
 
 namespace {
diff --git a/aegisub/src/command/recent.cpp b/aegisub/src/command/recent.cpp
index 1cf54983b0f71aed0ae4b9bed2054145d0fedbd8..6c6d4b33eb59e2c1e5e9ae7e57f962dab561d056 100644
--- a/aegisub/src/command/recent.cpp
+++ b/aegisub/src/command/recent.cpp
@@ -41,11 +41,12 @@
 
 #include "command.h"
 
-#include "../include/aegisub/context.h"
 #include "../audio_controller.h"
-#include "../main.h"
-#include "../frame_main.h"
 #include "../compat.h"
+#include "../frame_main.h"
+#include "../include/aegisub/context.h"
+#include "../main.h"
+#include "../options.h"
 #include "../video_context.h"
 
 namespace {
diff --git a/aegisub/src/command/subtitle.cpp b/aegisub/src/command/subtitle.cpp
index a802e10365f9e4e99cd2923603a50deea8185cce..78a3482c618ee2a49b935f6a12a17fbf00c06b84 100644
--- a/aegisub/src/command/subtitle.cpp
+++ b/aegisub/src/command/subtitle.cpp
@@ -57,10 +57,11 @@
 #include "../frame_main.h"
 #include "../include/aegisub/context.h"
 #include "../main.h"
+#include "../options.h"
 #include "../subs_grid.h"
 #include "../subtitle_format.h"
-#include "../video_context.h"
 #include "../utils.h"
+#include "../video_context.h"
 
 namespace {
 	using cmd::Command;
diff --git a/aegisub/src/command/time.cpp b/aegisub/src/command/time.cpp
index 5345052137f4c69ca4a452d85720a362570975ea..2b3fc8c591757fae8dc27b7fea77a326b9a2a97d 100644
--- a/aegisub/src/command/time.cpp
+++ b/aegisub/src/command/time.cpp
@@ -47,7 +47,7 @@
 #include "../dialog_manager.h"
 #include "../dialog_shift_times.h"
 #include "../include/aegisub/context.h"
-#include "../main.h"
+#include "../options.h"
 #include "../selection_controller.h"
 #include "../subs_grid.h"
 #include "../video_context.h"
diff --git a/aegisub/src/command/timecode.cpp b/aegisub/src/command/timecode.cpp
index bf937278d85b01dd556a47adeec4da34b699d432..60f728755108d9d9be7ae4112a4b081d679e02a5 100644
--- a/aegisub/src/command/timecode.cpp
+++ b/aegisub/src/command/timecode.cpp
@@ -41,9 +41,9 @@
 
 #include "command.h"
 
-#include "../include/aegisub/context.h"
 #include "../compat.h"
-#include "../main.h"
+#include "../include/aegisub/context.h"
+#include "../options.h"
 #include "../video_context.h"
 
 namespace {
diff --git a/aegisub/src/command/tool.cpp b/aegisub/src/command/tool.cpp
index a72d97e3591226870aab045d02180aad79f1b591..8b215388b625e45519ca2cb83b0e628d7ef779f2 100644
--- a/aegisub/src/command/tool.cpp
+++ b/aegisub/src/command/tool.cpp
@@ -41,22 +41,21 @@
 
 #include "command.h"
 
-#include "../include/aegisub/context.h"
-
-#include "../dialog_fonts_collector.h"
-#include "../standard_paths.h" // tool_assdraw
-#include "../video_context.h" // tool_font_collector
 #include "../compat.h"
 #include "../dialog_export.h"
+#include "../dialog_fonts_collector.h"
+#include "../dialog_kara_timing_copy.h"
 #include "../dialog_manager.h"
 #include "../dialog_resample.h"
 #include "../dialog_selection.h"
-#include "../dialog_styling_assistant.h"
 #include "../dialog_style_manager.h"
+#include "../dialog_styling_assistant.h"
 #include "../dialog_timing_processor.h"
 #include "../dialog_translation.h"
-#include "../dialog_kara_timing_copy.h"
+#include "../include/aegisub/context.h"
+#include "../standard_paths.h"
 #include "../subs_grid.h"
+#include "../video_context.h"
 
 namespace {
 	using cmd::Command;
diff --git a/aegisub/src/command/video.cpp b/aegisub/src/command/video.cpp
index 21f232e56b90451d8bf9e310053c8e3954531368..7a9bac113c90a525f30c9697b804024f128d3a78 100644
--- a/aegisub/src/command/video.cpp
+++ b/aegisub/src/command/video.cpp
@@ -47,14 +47,15 @@
 #include "../ass_dialogue.h"
 #include "../ass_time.h"
 #include "../compat.h"
-#include "../frame_main.h"
-#include "../main.h"
-#include "../include/aegisub/context.h"
 #include "../dialog_detached_video.h"
 #include "../dialog_dummy_video.h"
-#include "../dialog_manager.h"
 #include "../dialog_jumpto.h"
+#include "../dialog_manager.h"
 #include "../dialog_video_details.h"
+#include "../frame_main.h"
+#include "../include/aegisub/context.h"
+#include "../main.h"
+#include "../options.h"
 #include "../selection_controller.h"
 #include "../standard_paths.h"
 #include "../subs_grid.h"
diff --git a/aegisub/src/compat.cpp b/aegisub/src/compat.cpp
index b9ddd1e3c457371a3938a1a3d9528c6500f46a35..c6b0bf96d4c3c502ed9b8eabe5408c780487d225 100644
--- a/aegisub/src/compat.cpp
+++ b/aegisub/src/compat.cpp
@@ -1,5 +1,5 @@
 #include "compat.h"
-#include "main.h"
+#include "options.h"
 
 #include <algorithm>
 
diff --git a/aegisub/src/dialog_attachments.cpp b/aegisub/src/dialog_attachments.cpp
index 9c5b1358ce1066d342b652db620ff60125f6e33e..920078f407716e9b55e6aba6e61a2f2cf4d7e9d2 100644
--- a/aegisub/src/dialog_attachments.cpp
+++ b/aegisub/src/dialog_attachments.cpp
@@ -48,7 +48,7 @@
 #include "compat.h"
 #include "help_button.h"
 #include "libresrc/libresrc.h"
-#include "main.h"
+#include "options.h"
 #include "utils.h"
 
 #include <libaegisub/of_type_adaptor.h>
diff --git a/aegisub/src/dialog_automation.cpp b/aegisub/src/dialog_automation.cpp
index 164b1b8f865ea06b4483669a3a1a4b6b05261d99..33b379823c1e9ac74dd153a5c914a28e852a7652 100644
--- a/aegisub/src/dialog_automation.cpp
+++ b/aegisub/src/dialog_automation.cpp
@@ -35,15 +35,6 @@
 
 #include "config.h"
 
-#include <algorithm>
-
-#include <wx/button.h>
-#include <wx/filedlg.h>
-#include <wx/filename.h>
-#include <wx/listctrl.h>
-#include <wx/log.h>
-#include <wx/msgdlg.h>
-
 #include "dialog_automation.h"
 
 #include "auto4_base.h"
@@ -52,9 +43,19 @@
 #include "help_button.h"
 #include "include/aegisub/context.h"
 #include "libresrc/libresrc.h"
+#include "options.h"
 #include "main.h"
 #include "subtitle_format.h"
 
+#include <algorithm>
+
+#include <wx/button.h>
+#include <wx/filedlg.h>
+#include <wx/filename.h>
+#include <wx/listctrl.h>
+#include <wx/log.h>
+#include <wx/msgdlg.h>
+
 using std::placeholders::_1;
 
 DialogAutomation::DialogAutomation(agi::Context *c)
diff --git a/aegisub/src/dialog_autosave.cpp b/aegisub/src/dialog_autosave.cpp
index b7b73b819bb5b72dd264e41f0a40f3133cba60d1..75beee9b182281b901eb486688a176a8ffd74929 100644
--- a/aegisub/src/dialog_autosave.cpp
+++ b/aegisub/src/dialog_autosave.cpp
@@ -20,7 +20,7 @@
 
 #include "compat.h"
 #include "libresrc/libresrc.h"
-#include "main.h"
+#include "options.h"
 #include "standard_paths.h"
 
 #include <boost/range/adaptor/map.hpp>
diff --git a/aegisub/src/dialog_colorpicker.cpp b/aegisub/src/dialog_colorpicker.cpp
index c6fa212ef5d710aebc1359b06a8a0cfffa6a167d..2d67787c90eaaa8997f836b0209511be01491cfc 100644
--- a/aegisub/src/dialog_colorpicker.cpp
+++ b/aegisub/src/dialog_colorpicker.cpp
@@ -67,7 +67,7 @@
 #include "dialog_colorpicker.h"
 #include "help_button.h"
 #include "libresrc/libresrc.h"
-#include "main.h"
+#include "options.h"
 #include "persist_location.h"
 #include "utils.h"
 
diff --git a/aegisub/src/dialog_detached_video.cpp b/aegisub/src/dialog_detached_video.cpp
index 555ebe83ec010e4ce274225809fe2523e053a80a..96249d53cf1230662cf51c31440c2db369a865e1 100644
--- a/aegisub/src/dialog_detached_video.cpp
+++ b/aegisub/src/dialog_detached_video.cpp
@@ -34,22 +34,22 @@
 
 #include "config.h"
 
-#include <wx/filename.h>
-#include <wx/sizer.h>
-#include <wx/display.h> /// Must be included last.
-
 #include "dialog_detached_video.h"
 
 #include "include/aegisub/context.h"
 #include "include/aegisub/hotkey.h"
 
-#include "main.h"
+#include "options.h"
 #include "persist_location.h"
 #include "utils.h"
 #include "video_box.h"
 #include "video_context.h"
 #include "video_display.h"
 
+#include <wx/filename.h>
+#include <wx/sizer.h>
+#include <wx/display.h> /// Must be included last.
+
 DialogDetachedVideo::DialogDetachedVideo(agi::Context *context)
 : wxDialog(context->parent, -1, "Detached Video", wxDefaultPosition, wxSize(400,300), wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER | wxMAXIMIZE_BOX | wxMINIMIZE_BOX | wxWANTS_CHARS)
 , context(context)
diff --git a/aegisub/src/dialog_dummy_video.cpp b/aegisub/src/dialog_dummy_video.cpp
index a1fe8dfcb16813f2a096614be25d925e18411928..1ecabd7ea9e664636691a966fd5c43dc2d2b3312 100644
--- a/aegisub/src/dialog_dummy_video.cpp
+++ b/aegisub/src/dialog_dummy_video.cpp
@@ -38,7 +38,7 @@
 #include "colour_button.h"
 #include "help_button.h"
 #include "libresrc/libresrc.h"
-#include "main.h"
+#include "options.h"
 #include "video_provider_dummy.h"
 
 namespace {
diff --git a/aegisub/src/dialog_export_ebu3264.cpp b/aegisub/src/dialog_export_ebu3264.cpp
index c85393a7c26bedcf660a2e6fcd4da1259f059503..cfb8b96523ac1be862e20c63f8d09d0babbb26d4 100644
--- a/aegisub/src/dialog_export_ebu3264.cpp
+++ b/aegisub/src/dialog_export_ebu3264.cpp
@@ -25,7 +25,7 @@
 
 #include <libaegisub/charset_conv.h>
 
-#include "main.h"
+#include "options.h"
 #include "text_file_writer.h"
 
 #include <wx/checkbox.h>
diff --git a/aegisub/src/dialog_fonts_collector.cpp b/aegisub/src/dialog_fonts_collector.cpp
index 6fd88e0c6d0a6b2b7a6519d30fd7ba21f6a66c11..3a39b519978dc93496c0c8a5e13f66f63a993d66 100644
--- a/aegisub/src/dialog_fonts_collector.cpp
+++ b/aegisub/src/dialog_fonts_collector.cpp
@@ -31,7 +31,7 @@
 #include "help_button.h"
 #include "include/aegisub/context.h"
 #include "libresrc/libresrc.h"
-#include "main.h"
+#include "options.h"
 #include "scintilla_text_ctrl.h"
 #include "selection_controller.h"
 #include "standard_paths.h"
diff --git a/aegisub/src/dialog_kara_timing_copy.cpp b/aegisub/src/dialog_kara_timing_copy.cpp
index 5a8d24583da0d46477e7bae6d58f7343603361de..f9d26abb3d324cfa9ee5e45184b8c31a1324d3b9 100644
--- a/aegisub/src/dialog_kara_timing_copy.cpp
+++ b/aegisub/src/dialog_kara_timing_copy.cpp
@@ -58,7 +58,7 @@
 #include "include/aegisub/context.h"
 #include "kana_table.h"
 #include "libresrc/libresrc.h"
-#include "main.h"
+#include "options.h"
 #include "selection_controller.h"
 #include "utils.h"
 
diff --git a/aegisub/src/dialog_paste_over.cpp b/aegisub/src/dialog_paste_over.cpp
index d8c9980327c04c5437d5204614deccc831dd51d7..680fc1d65094f99ec2e742a5134d32cb4454203d 100644
--- a/aegisub/src/dialog_paste_over.cpp
+++ b/aegisub/src/dialog_paste_over.cpp
@@ -44,7 +44,7 @@
 #include <wx/stattext.h>
 
 #include "help_button.h"
-#include "main.h"
+#include "options.h"
 
 DialogPasteOver::DialogPasteOver(wxWindow *parent)
 : wxDialog (parent, -1, _("Select Fields to Paste Over"))
diff --git a/aegisub/src/dialog_search_replace.cpp b/aegisub/src/dialog_search_replace.cpp
index d146062450229ce5ada65d43f10575f09f70e6a3..348c261f65321e010fccea23b6280492e1fe5bea 100644
--- a/aegisub/src/dialog_search_replace.cpp
+++ b/aegisub/src/dialog_search_replace.cpp
@@ -49,7 +49,7 @@
 #include "compat.h"
 #include "dialog_search_replace.h"
 #include "include/aegisub/context.h"
-#include "main.h"
+#include "options.h"
 #include "selection_controller.h"
 #include "text_selection_controller.h"
 #include "subs_edit_ctrl.h"
diff --git a/aegisub/src/dialog_selection.cpp b/aegisub/src/dialog_selection.cpp
index 6562295becf3212be9f7fca16fb9b860a114a388..6b1eb7b9cd47dc67b06135f194cd67a9e6b4f8c4 100644
--- a/aegisub/src/dialog_selection.cpp
+++ b/aegisub/src/dialog_selection.cpp
@@ -23,16 +23,6 @@
 
 #include "dialog_selection.h"
 
-#include <algorithm>
-
-#include <wx/checkbox.h>
-#include <wx/combobox.h>
-#include <wx/msgdlg.h>
-#include <wx/radiobox.h>
-#include <wx/radiobut.h>
-#include <wx/regex.h>
-#include <wx/textctrl.h>
-
 #include "ass_dialogue.h"
 #include "ass_file.h"
 #include "compat.h"
@@ -41,10 +31,21 @@
 #include "include/aegisub/context.h"
 #include "libresrc/libresrc.h"
 #include "main.h"
+#include "options.h"
 #include "selection_controller.h"
 
 #include <libaegisub/of_type_adaptor.h>
 
+#include <algorithm>
+
+#include <wx/checkbox.h>
+#include <wx/combobox.h>
+#include <wx/msgdlg.h>
+#include <wx/radiobox.h>
+#include <wx/radiobut.h>
+#include <wx/regex.h>
+#include <wx/textctrl.h>
+
 enum {
 	ACTION_SET = 0,
 	ACTION_ADD,
diff --git a/aegisub/src/dialog_shift_times.cpp b/aegisub/src/dialog_shift_times.cpp
index 5da7a7250fd54b7819c0ac5ff898fb17512dec17..da1f62b8e98db1701e5ad73a3f5db8d39376b6ac 100644
--- a/aegisub/src/dialog_shift_times.cpp
+++ b/aegisub/src/dialog_shift_times.cpp
@@ -49,7 +49,7 @@
 #include "include/aegisub/context.h"
 #include "help_button.h"
 #include "libresrc/libresrc.h"
-#include "main.h"
+#include "options.h"
 #include "standard_paths.h"
 #include "timeedit_ctrl.h"
 #include "video_context.h"
diff --git a/aegisub/src/dialog_spellchecker.cpp b/aegisub/src/dialog_spellchecker.cpp
index 2f79aacf7870d256fb2ea3318e9c0e2e31ac9518..f7489d9b08b36081f0965add63185fcf496832b4 100644
--- a/aegisub/src/dialog_spellchecker.cpp
+++ b/aegisub/src/dialog_spellchecker.cpp
@@ -30,7 +30,7 @@
 #include "include/aegisub/context.h"
 #include "include/aegisub/spellchecker.h"
 #include "libresrc/libresrc.h"
-#include "main.h"
+#include "options.h"
 #include "selection_controller.h"
 #include "text_selection_controller.h"
 #include "subs_edit_ctrl.h"
diff --git a/aegisub/src/dialog_style_editor.cpp b/aegisub/src/dialog_style_editor.cpp
index 71f50036ef36ad0e968ea95da4b07afd1b7baa7c..6ed551a161b8220dbb1d64799682e094cd028972 100644
--- a/aegisub/src/dialog_style_editor.cpp
+++ b/aegisub/src/dialog_style_editor.cpp
@@ -53,7 +53,7 @@
 #include "include/aegisub/context.h"
 #include "include/aegisub/subtitles_provider.h"
 #include "libresrc/libresrc.h"
-#include "main.h"
+#include "options.h"
 #include "persist_location.h"
 #include "selection_controller.h"
 #include "subs_grid.h"
diff --git a/aegisub/src/dialog_style_manager.cpp b/aegisub/src/dialog_style_manager.cpp
index 84bc3e64fe88ced6eb4379fc11e9534273caa709..bce13eed0877fb8183f6c3e9152b9fdf7e446c08 100644
--- a/aegisub/src/dialog_style_manager.cpp
+++ b/aegisub/src/dialog_style_manager.cpp
@@ -58,7 +58,7 @@
 #include "include/aegisub/context.h"
 #include "help_button.h"
 #include "libresrc/libresrc.h"
-#include "main.h"
+#include "options.h"
 #include "persist_location.h"
 #include "selection_controller.h"
 #include "standard_paths.h"
diff --git a/aegisub/src/dialog_text_import.cpp b/aegisub/src/dialog_text_import.cpp
index a6d4dfc533528875ede50b1fde7e93d99fea9871..cd864fb75cfb5a34e6f30650bb47ef3b9fd6f560 100644
--- a/aegisub/src/dialog_text_import.cpp
+++ b/aegisub/src/dialog_text_import.cpp
@@ -41,7 +41,7 @@
 #include <wx/textctrl.h>
 
 #include "compat.h"
-#include "main.h"
+#include "options.h"
 
 DialogTextImport::DialogTextImport()
 : wxDialog(nullptr , -1, _("Text import options"))
diff --git a/aegisub/src/dialog_timing_processor.cpp b/aegisub/src/dialog_timing_processor.cpp
index 4f0fbcef06b2b59485e7ba19df0e82ca1ecb4697..9913540667896082f9d1a96ad567259a3b108deb 100644
--- a/aegisub/src/dialog_timing_processor.cpp
+++ b/aegisub/src/dialog_timing_processor.cpp
@@ -57,7 +57,7 @@
 #include "help_button.h"
 #include "include/aegisub/context.h"
 #include "libresrc/libresrc.h"
-#include "main.h"
+#include "options.h"
 #include "selection_controller.h"
 #include "utils.h"
 #include "video_context.h"
diff --git a/aegisub/src/dialog_version_check.cpp b/aegisub/src/dialog_version_check.cpp
index 8677118186858df8c8551276e11b1bc3a2b66de9..f35f615716e05ed467c2e3507fc697ef08b898a9 100644
--- a/aegisub/src/dialog_version_check.cpp
+++ b/aegisub/src/dialog_version_check.cpp
@@ -66,7 +66,7 @@
 #include <wx/sstream.h>
 
 #include "compat.h"
-#include "main.h"
+#include "options.h"
 #include "string_codec.h"
 #include "version.h"
 
diff --git a/aegisub/src/ffmpegsource_common.cpp b/aegisub/src/ffmpegsource_common.cpp
index 7618c9e2eceee61a1798c4fefdbd46b10b0c12e5..106bb157a682669132f6cab6b9ec73725e063e57 100644
--- a/aegisub/src/ffmpegsource_common.cpp
+++ b/aegisub/src/ffmpegsource_common.cpp
@@ -41,6 +41,7 @@
 #include "dialog_progress.h"
 #include "frame_main.h"
 #include "main.h"
+#include "options.h"
 #include "standard_paths.h"
 #include "utils.h"
 
diff --git a/aegisub/src/frame_main.cpp b/aegisub/src/frame_main.cpp
index a1b33c66972166c1451a68d7c51c925d08c0d511..a5bcf8680ffd0d56b420e46f9e739418d352d102 100644
--- a/aegisub/src/frame_main.cpp
+++ b/aegisub/src/frame_main.cpp
@@ -64,6 +64,7 @@
 #include "help_button.h"
 #include "libresrc/libresrc.h"
 #include "main.h"
+#include "options.h"
 #include "standard_paths.h"
 #include "subs_edit_box.h"
 #include "subs_edit_ctrl.h"
@@ -231,7 +232,6 @@ FrameMain::FrameMain (wxArrayString args)
 	StartupLog("Initializing context frames");
 	context->parent = this;
 	context->previousFocus = 0;
-	wxGetApp().frame = this;
 
 	StartupLog("Install PNG handler");
 	wxImage::AddHandler(new wxPNGHandler);
diff --git a/aegisub/src/hotkey.cpp b/aegisub/src/hotkey.cpp
index 50fec7a1cd3ef5ec6cfddb4db160145155aede21..6431985cc55133f0c10415a685b3e90317942393 100644
--- a/aegisub/src/hotkey.cpp
+++ b/aegisub/src/hotkey.cpp
@@ -25,7 +25,7 @@
 #include "libresrc/libresrc.h"
 #include "command/command.h"
 #include "compat.h"
-#include "main.h"
+#include "options.h"
 #include "standard_paths.h"
 
 namespace {
diff --git a/aegisub/src/main.cpp b/aegisub/src/main.cpp
index 249aeaba2cf39cd6a5d2d6a6320c660b64888b63..e45983b83dd8017811e1d220b757c8b667a22481 100644
--- a/aegisub/src/main.cpp
+++ b/aegisub/src/main.cpp
@@ -34,16 +34,7 @@
 
 #include "config.h"
 
-#include <sstream>
-
-#include <wx/clipbrd.h>
-#include <wx/config.h>
-#include <wx/datetime.h>
-#include <wx/filefn.h>
-#include <wx/filename.h>
-#include <wx/msgdlg.h>
-#include <wx/stdpaths.h>
-#include <wx/utils.h>
+#include "main.h"
 
 #include "include/aegisub/menu.h"
 #include "command/command.h"
@@ -61,8 +52,8 @@
 #include "export_fixstyle.h"
 #include "export_framerate.h"
 #include "frame_main.h"
-#include "main.h"
 #include "libresrc/libresrc.h"
+#include "options.h"
 #include "plugin_manager.h"
 #include "standard_paths.h"
 #include "subtitle_format.h"
@@ -75,6 +66,17 @@
 #include <libaegisub/hotkey.h>
 #include <libaegisub/scoped_ptr.h>
 
+#include <sstream>
+
+#include <wx/clipbrd.h>
+#include <wx/config.h>
+#include <wx/datetime.h>
+#include <wx/filefn.h>
+#include <wx/filename.h>
+#include <wx/msgdlg.h>
+#include <wx/stdpaths.h>
+#include <wx/utils.h>
+
 namespace config {
 	agi::Options *opt = 0;
 	agi::MRUManager *mru = 0;
diff --git a/aegisub/src/main.h b/aegisub/src/main.h
index 49d84ccc7aa17167dcb8fafca6c1ae546f56dcea..20c137804b689ba5e4a238cb740240ce59014057 100644
--- a/aegisub/src/main.h
+++ b/aegisub/src/main.h
@@ -37,9 +37,6 @@
 #include <wx/stackwalk.h>
 
 #include "aegisublocale.h"
-#include <libaegisub/mru.h>
-#include <libaegisub/option.h>
-#include <libaegisub/option_value.h>
 
 #ifndef wxUSE_EXCEPTIONS
 #error wxWidgets is compiled without exceptions support. Aegisub requires exceptions support in wxWidgets to run safely.
@@ -48,23 +45,8 @@
 class FrameMain;
 class PluginManager;
 
-/// For holding all configuration-related objects and values.
-namespace config {
-	extern agi::Options *opt; 		///< Options
-	extern agi::MRUManager *mru;	///< Most Recently Used
-}
-
 namespace Automation4 { class AutoloadScriptManager; }
 
-/// Macro to get OptionValue object.
-#define OPT_GET(x) const_cast<const agi::OptionValue*>(config::opt->Get(x))
-
-/// Macro to set OptionValue object.
-#define OPT_SET(x) config::opt->Get(x)
-
-/// Macro to subscribe to OptionValue changes
-#define OPT_SUB(x, ...) config::opt->Get(x)->Subscribe(__VA_ARGS__)
-
 class AegisubApp: public wxApp {
 	PluginManager *plugins;
 
diff --git a/aegisub/src/menu.cpp b/aegisub/src/menu.cpp
index 4c743dd96a59778a77ed60250770a2ba3f6f0d25..f968b13b9c8aca81d867f519d8e1666090b7629a 100644
--- a/aegisub/src/menu.cpp
+++ b/aegisub/src/menu.cpp
@@ -28,6 +28,7 @@
 #include "compat.h"
 #include "libresrc/libresrc.h"
 #include "main.h"
+#include "options.h"
 #include "standard_paths.h"
 
 #include <libaegisub/hotkey.h>
diff --git a/aegisub/src/options.h b/aegisub/src/options.h
new file mode 100644
index 0000000000000000000000000000000000000000..6c3261fc5b88884551ca7b6a9312a6d829ba9433
--- /dev/null
+++ b/aegisub/src/options.h
@@ -0,0 +1,34 @@
+// Copyright (c) 2011, Thomas Goyne <plorkyeran@aegisub.org>
+//
+// Permission to use, copy, modify, and distribute this software for any
+// purpose with or without fee is hereby granted, provided that the above
+// copyright notice and this permission notice appear in all copies.
+//
+// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+//
+// Aegisub Project http://www.aegisub.org/
+
+#include <libaegisub/mru.h>
+#include <libaegisub/option.h>
+#include <libaegisub/option_value.h>
+
+/// For holding all configuration-related objects and values.
+namespace config {
+	extern agi::Options *opt;    ///< Options
+	extern agi::MRUManager *mru; ///< Most Recently Used
+}
+
+/// Macro to get OptionValue object
+#define OPT_GET(x) const_cast<const agi::OptionValue*>(config::opt->Get(x))
+
+/// Macro to set OptionValue object
+#define OPT_SET(x) config::opt->Get(x)
+
+/// Macro to subscribe to OptionValue changes
+#define OPT_SUB(x, ...) config::opt->Get(x)->Subscribe(__VA_ARGS__)
diff --git a/aegisub/src/pen.cpp b/aegisub/src/pen.cpp
index fed982b30466da0c28686762e343eda81c6b55ce..f51fdedc3678eed89ab863fcbc70f2da5aaae672 100644
--- a/aegisub/src/pen.cpp
+++ b/aegisub/src/pen.cpp
@@ -19,7 +19,7 @@
 #include "pen.h"
 
 #include "compat.h"
-#include "main.h"
+#include "options.h"
 
 void Pen::OnColourChanged(agi::OptionValue const& opt) {
 	impl.SetColour(to_wx(opt.GetColor()));
diff --git a/aegisub/src/persist_location.cpp b/aegisub/src/persist_location.cpp
index 901bf63df0908cc2390f1009826e3586afb7c57f..4db24aac86cfca96ab9b89006d4d75f0ccdfa3cd 100644
--- a/aegisub/src/persist_location.cpp
+++ b/aegisub/src/persist_location.cpp
@@ -22,7 +22,7 @@
 
 #include "persist_location.h"
 
-#include "main.h"
+#include "options.h"
 
 #include <wx/dialog.h>
 #include <wx/display.h>
diff --git a/aegisub/src/preferences.cpp b/aegisub/src/preferences.cpp
index e067feca2ad395fe7b93b6890acfc318fc842a73..c6c3eed93cf397d433e268d18ea58e539cc4e743 100644
--- a/aegisub/src/preferences.cpp
+++ b/aegisub/src/preferences.cpp
@@ -50,7 +50,7 @@
 #include "include/aegisub/hotkey.h"
 #include "include/aegisub/subtitles_provider.h"
 #include "libresrc/libresrc.h"
-#include "main.h"
+#include "options.h"
 #include "preferences_base.h"
 #include "video_provider_manager.h"
 
diff --git a/aegisub/src/preferences_base.cpp b/aegisub/src/preferences_base.cpp
index ec77942ee5ebf5972bf8f959a980c8b08a5c4588..bdc4f24ea6408fbd292c64ee535627a1001f6933 100644
--- a/aegisub/src/preferences_base.cpp
+++ b/aegisub/src/preferences_base.cpp
@@ -39,7 +39,7 @@
 #include "include/aegisub/audio_player.h"
 #include "include/aegisub/audio_provider.h"
 #include "libresrc/libresrc.h"
-#include "main.h"
+#include "options.h"
 #include "preferences.h"
 #include "standard_paths.h"
 #include "video_provider_manager.h"
diff --git a/aegisub/src/spellchecker.cpp b/aegisub/src/spellchecker.cpp
index 28e4ffbc331d5ad3b69e0c3cf016a425e9a21030..01073f7308b3199e2989aff58069e047780acbc7 100644
--- a/aegisub/src/spellchecker.cpp
+++ b/aegisub/src/spellchecker.cpp
@@ -40,7 +40,7 @@
 
 #include "compat.h"
 #include "include/aegisub/spellchecker.h"
-#include "main.h"
+#include "options.h"
 
 agi::SpellChecker *SpellCheckerFactory::GetSpellChecker() {
 	std::vector<std::string> list = GetClasses(OPT_GET("Tool/Spell Checker/Backend")->GetString());
diff --git a/aegisub/src/spellchecker_hunspell.cpp b/aegisub/src/spellchecker_hunspell.cpp
index 468f54a80813901fbb8b3c82eb76b0a78ddd4c70..fd71c0359e6d51a8aa879e5bd71b4b659fcd6037 100644
--- a/aegisub/src/spellchecker_hunspell.cpp
+++ b/aegisub/src/spellchecker_hunspell.cpp
@@ -39,7 +39,7 @@
 
 #include "charset_conv.h"
 #include "compat.h"
-#include "main.h"
+#include "options.h"
 #include "standard_paths.h"
 
 HunspellSpellChecker::HunspellSpellChecker()
diff --git a/aegisub/src/subs_edit_box.cpp b/aegisub/src/subs_edit_box.cpp
index fd156ffb29edd44e2ee0299cca3d5f036ff01a3e..e992cbd0cab31e42e791efcc7a9f51aff3930622 100644
--- a/aegisub/src/subs_edit_box.cpp
+++ b/aegisub/src/subs_edit_box.cpp
@@ -57,7 +57,7 @@
 #include "include/aegisub/context.h"
 #include "include/aegisub/hotkey.h"
 #include "libresrc/libresrc.h"
-#include "main.h"
+#include "options.h"
 #include "placeholder_ctrl.h"
 #include "scintilla_text_selection_controller.h"
 #include "subs_edit_ctrl.h"
diff --git a/aegisub/src/subs_edit_ctrl.cpp b/aegisub/src/subs_edit_ctrl.cpp
index af64ad9975ac2f5849418abffecc358d8f929d26..3ec4c5544eff28a9b2d4e8a9d5c590955b750152 100644
--- a/aegisub/src/subs_edit_ctrl.cpp
+++ b/aegisub/src/subs_edit_ctrl.cpp
@@ -47,7 +47,7 @@
 #include "ass_file.h"
 #include "command/command.h"
 #include "compat.h"
-#include "main.h"
+#include "options.h"
 #include "include/aegisub/context.h"
 #include "include/aegisub/spellchecker.h"
 #include "selection_controller.h"
diff --git a/aegisub/src/subs_grid.cpp b/aegisub/src/subs_grid.cpp
index c68f4bedce27308649c32a0514f4962a3d704994..f5b8725436db7105802f80e0ddef444de3b4bcf7 100644
--- a/aegisub/src/subs_grid.cpp
+++ b/aegisub/src/subs_grid.cpp
@@ -48,7 +48,7 @@
 
 #include "ass_dialogue.h"
 #include "ass_file.h"
-#include "main.h"
+#include "options.h"
 #include "utils.h"
 #include "video_context.h"
 
diff --git a/aegisub/src/subtitle_format_ebu3264.cpp b/aegisub/src/subtitle_format_ebu3264.cpp
index 183343083287e6ca8e3177cb15eed779a76b3839..babac3f5d2e49d871ada1bfd8721d850a0bcf298 100644
--- a/aegisub/src/subtitle_format_ebu3264.cpp
+++ b/aegisub/src/subtitle_format_ebu3264.cpp
@@ -40,7 +40,7 @@
 #include "ass_style.h"
 #include "compat.h"
 #include "dialog_export_ebu3264.h"
-#include "main.h"
+#include "options.h"
 #include "text_file_writer.h"
 
 namespace
diff --git a/aegisub/src/subtitle_format_ttxt.cpp b/aegisub/src/subtitle_format_ttxt.cpp
index 46492721771f589c4f72f8150f8fb6b0f1d129ae..ea5d41998e782b247c29f7d7a71869d622d794c4 100644
--- a/aegisub/src/subtitle_format_ttxt.cpp
+++ b/aegisub/src/subtitle_format_ttxt.cpp
@@ -42,7 +42,7 @@
 #include "ass_file.h"
 #include "ass_time.h"
 #include "compat.h"
-#include "main.h"
+#include "options.h"
 
 #include <libaegisub/of_type_adaptor.h>
 #include <boost/range/adaptor/reversed.hpp>
diff --git a/aegisub/src/subtitle_format_txt.cpp b/aegisub/src/subtitle_format_txt.cpp
index 99449811b8c8f8ea8bf93cfc75148e3e99fa763f..8d0cce74a4b0ad250775783ccc7290f0d4237c33 100644
--- a/aegisub/src/subtitle_format_txt.cpp
+++ b/aegisub/src/subtitle_format_txt.cpp
@@ -40,7 +40,7 @@
 #include "ass_file.h"
 #include "compat.h"
 #include "dialog_text_import.h"
-#include "main.h"
+#include "options.h"
 #include "text_file_reader.h"
 #include "text_file_writer.h"
 #include "utils.h"
diff --git a/aegisub/src/subtitles_provider.cpp b/aegisub/src/subtitles_provider.cpp
index 426209adf99ea0999db6bf4d2c07f47f2b2ca562..16345143339b90df7dc29d1bdf93ffe29b7c9956 100644
--- a/aegisub/src/subtitles_provider.cpp
+++ b/aegisub/src/subtitles_provider.cpp
@@ -35,7 +35,7 @@
 #include "config.h"
 
 #include "compat.h"
-#include "main.h"
+#include "options.h"
 #ifdef WITH_CSRI
 #include "subtitles_provider_csri.h"
 #endif
diff --git a/aegisub/src/text_file_writer.cpp b/aegisub/src/text_file_writer.cpp
index 815c52fde630e04c1d62a781600f2279ef7f8ae4..98a95b04ddd0110dd96fc532aade21c3f9d708fc 100644
--- a/aegisub/src/text_file_writer.cpp
+++ b/aegisub/src/text_file_writer.cpp
@@ -40,7 +40,7 @@
 
 #include "charset_conv.h"
 #include "compat.h"
-#include "main.h"
+#include "options.h"
 #include "text_file_writer.h"
 
 TextFileWriter::TextFileWriter(wxString const& filename, wxString encoding)
diff --git a/aegisub/src/thesaurus.cpp b/aegisub/src/thesaurus.cpp
index 53708b160f11ff697dd2f3389239c2d52da27c2b..4607d71f050d5930ed1475dfd98b9e891fc159a6 100644
--- a/aegisub/src/thesaurus.cpp
+++ b/aegisub/src/thesaurus.cpp
@@ -31,7 +31,7 @@
 #include <libaegisub/util.h>
 
 #include "compat.h"
-#include "main.h"
+#include "options.h"
 #include "standard_paths.h"
 
 Thesaurus::Thesaurus()
diff --git a/aegisub/src/timeedit_ctrl.cpp b/aegisub/src/timeedit_ctrl.cpp
index ef4366a84d2140eaf9940607a3fd88f680e9af35..67c53e0164e9c9723ceb0681de8c1bad638d91f2 100644
--- a/aegisub/src/timeedit_ctrl.cpp
+++ b/aegisub/src/timeedit_ctrl.cpp
@@ -46,7 +46,7 @@
 #include "ass_time.h"
 #include "compat.h"
 #include "include/aegisub/context.h"
-#include "main.h"
+#include "options.h"
 #include "utils.h"
 #include "video_context.h"
 
diff --git a/aegisub/src/toolbar.cpp b/aegisub/src/toolbar.cpp
index 5cd6e1eedfbae1f4863d636a7dbf9cf3446d6b83..40b772888a8dbe271cd1a201362fda02c8a8323e 100644
--- a/aegisub/src/toolbar.cpp
+++ b/aegisub/src/toolbar.cpp
@@ -25,7 +25,7 @@
 #include "include/aegisub/context.h"
 #include "include/aegisub/hotkey.h"
 #include "libresrc/libresrc.h"
-#include "main.h"
+#include "options.h"
 
 #include <libaegisub/hotkey.h>
 #include <libaegisub/json.h>
diff --git a/aegisub/src/utils.cpp b/aegisub/src/utils.cpp
index f8351f1972389e8b2524a91b885551dfc1c174db..e0a18df10c19af7e3aa289b40f7a358d38d4f10e 100644
--- a/aegisub/src/utils.cpp
+++ b/aegisub/src/utils.cpp
@@ -54,7 +54,7 @@
 #endif
 
 #include "compat.h"
-#include "main.h"
+#include "options.h"
 
 wxDEFINE_EVENT(EVT_CALL_THUNK, wxThreadEvent);
 
diff --git a/aegisub/src/utils.h b/aegisub/src/utils.h
index 4330b845cd931bd8f44ea8efaa592204fbe89d58..1ed48b3b3fd60a7c15c937977846d42c21d81764 100644
--- a/aegisub/src/utils.h
+++ b/aegisub/src/utils.h
@@ -44,6 +44,7 @@
 
 #include <wx/app.h>
 #include <wx/icon.h>
+#include <wx/event.h>
 #include <wx/thread.h>
 
 class wxMouseEvent;
diff --git a/aegisub/src/video_box.cpp b/aegisub/src/video_box.cpp
index 7835805e1ec1e2c0ee36ff46114abb385345d286..035b085e273bbede61a527ce79b7f7b146827a3f 100644
--- a/aegisub/src/video_box.cpp
+++ b/aegisub/src/video_box.cpp
@@ -54,7 +54,7 @@
 #include "command/command.h"
 #include "compat.h"
 #include "libresrc/libresrc.h"
-#include "main.h"
+#include "options.h"
 #include "selection_controller.h"
 #include "toggle_bitmap.h"
 #include "tooltip_manager.h"
diff --git a/aegisub/src/video_context.cpp b/aegisub/src/video_context.cpp
index a7949069008e61a8b1dfa502f2e9ec44e17c02c8..5970e68de764a1702ce20efcee940c35e93269b6 100644
--- a/aegisub/src/video_context.cpp
+++ b/aegisub/src/video_context.cpp
@@ -53,8 +53,8 @@
 #include "compat.h"
 #include "include/aegisub/context.h"
 #include "include/aegisub/video_provider.h"
-#include "main.h"
 #include "mkv_wrap.h"
+#include "options.h"
 #include "selection_controller.h"
 #include "standard_paths.h"
 #include "time_range.h"
diff --git a/aegisub/src/video_display.cpp b/aegisub/src/video_display.cpp
index 6f937b3ea45c320b21624fed72c705fbc778e752..ce1963b89db5d9a2548eda62f51bec92182fbb30 100644
--- a/aegisub/src/video_display.cpp
+++ b/aegisub/src/video_display.cpp
@@ -57,7 +57,7 @@
 #include "include/aegisub/context.h"
 #include "include/aegisub/hotkey.h"
 #include "include/aegisub/menu.h"
-#include "main.h"
+#include "options.h"
 #include "spline_curve.h"
 #include "threaded_frame_source.h"
 #include "utils.h"
diff --git a/aegisub/src/video_provider_avs.cpp b/aegisub/src/video_provider_avs.cpp
index 670d8b238bef80d077aaf6063b4943c70785c5f3..3fd4a0df12214a799e696a1be74ec8f5da519a9e 100644
--- a/aegisub/src/video_provider_avs.cpp
+++ b/aegisub/src/video_provider_avs.cpp
@@ -49,7 +49,7 @@
 
 #include "charset_conv.h"
 #include "compat.h"
-#include "main.h"
+#include "options.h"
 #include "standard_paths.h"
 
 AvisynthVideoProvider::AvisynthVideoProvider(wxString filename)
diff --git a/aegisub/src/video_provider_cache.cpp b/aegisub/src/video_provider_cache.cpp
index 9c929a27bbfc4acfbe8f92272b032c5a0f9b588d..9891210d806cd29edf25a18ad016048e30a1a005 100644
--- a/aegisub/src/video_provider_cache.cpp
+++ b/aegisub/src/video_provider_cache.cpp
@@ -36,7 +36,7 @@
 
 #include "video_provider_cache.h"
 
-#include "main.h"
+#include "options.h"
 #include "video_frame.h"
 
 #include <algorithm>
diff --git a/aegisub/src/video_provider_ffmpegsource.cpp b/aegisub/src/video_provider_ffmpegsource.cpp
index 3d2cb94186453f35aab74161af0f007388fe80bf..cd9f810c486e6dccdbebddfd592ad1f440b68f79 100644
--- a/aegisub/src/video_provider_ffmpegsource.cpp
+++ b/aegisub/src/video_provider_ffmpegsource.cpp
@@ -35,10 +35,7 @@
 #include "config.h"
 
 #ifdef WITH_FFMS2
-
-#ifdef __WINDOWS__
-#include <objbase.h>
-#endif
+#include "video_provider_ffmpegsource.h"
 
 #include <map>
 
@@ -48,10 +45,9 @@
 
 #include "aegisub_endian.h"
 #include "compat.h"
-#include "main.h"
+#include "options.h"
 #include "utils.h"
 #include "video_context.h"
-#include "video_provider_ffmpegsource.h"
 
 /// @brief Constructor
 /// @param filename The filename to open
diff --git a/aegisub/src/video_provider_manager.cpp b/aegisub/src/video_provider_manager.cpp
index 070c7c3401c85c433448263aacc1adee79041629..7f630f6c69e8b1078992afd3d19021dd16103259 100644
--- a/aegisub/src/video_provider_manager.cpp
+++ b/aegisub/src/video_provider_manager.cpp
@@ -37,7 +37,7 @@
 #include <libaegisub/log.h>
 
 #include "compat.h"
-#include "main.h"
+#include "options.h"
 
 #ifdef WITH_AVISYNTH
 #include "video_provider_avs.h"
diff --git a/aegisub/src/video_slider.cpp b/aegisub/src/video_slider.cpp
index 2162c46c17ce0d7187518355adacffdac59df938..05da82f77cc598e05f7e5e8c7aaa44ede382316b 100644
--- a/aegisub/src/video_slider.cpp
+++ b/aegisub/src/video_slider.cpp
@@ -39,7 +39,7 @@
 
 #include "include/aegisub/context.h"
 #include "include/aegisub/hotkey.h"
-#include "main.h"
+#include "options.h"
 #include "subs_grid.h"
 #include "utils.h"
 #include "video_context.h"
diff --git a/aegisub/src/visual_tool.cpp b/aegisub/src/visual_tool.cpp
index 82a2b8d04248b97713c34ae950e1804f788436e0..ad6d37b0a92abebb0f81b3bca5a130ab7529b6da 100644
--- a/aegisub/src/visual_tool.cpp
+++ b/aegisub/src/visual_tool.cpp
@@ -30,7 +30,7 @@
 #include "ass_time.h"
 #include "compat.h"
 #include "include/aegisub/context.h"
-#include "main.h"
+#include "options.h"
 #include "utils.h"
 #include "video_context.h"
 #include "video_display.h"
diff --git a/aegisub/src/visual_tool_drag.cpp b/aegisub/src/visual_tool_drag.cpp
index 2297525b79126fe2b587cbf2b4246d208d5a62c0..29c3b97c459eded2ef5b066d03e41fcef55877f0 100644
--- a/aegisub/src/visual_tool_drag.cpp
+++ b/aegisub/src/visual_tool_drag.cpp
@@ -32,7 +32,7 @@
 #include "ass_file.h"
 #include "include/aegisub/context.h"
 #include "libresrc/libresrc.h"
-#include "main.h"
+#include "options.h"
 #include "utils.h"
 #include "video_context.h"
 #include "video_display.h"
diff --git a/aegisub/src/visual_tool_vector_clip.cpp b/aegisub/src/visual_tool_vector_clip.cpp
index d63beec7a63ec3d0a82e664ee2408d7e4250113e..5039396c702d2bf851a9664821a76f134a0cb6a3 100644
--- a/aegisub/src/visual_tool_vector_clip.cpp
+++ b/aegisub/src/visual_tool_vector_clip.cpp
@@ -29,7 +29,7 @@
 #include "ass_dialogue.h"
 #include "include/aegisub/context.h"
 #include "libresrc/libresrc.h"
-#include "main.h"
+#include "options.h"
 #include "selection_controller.h"
 #include "utils.h"