diff --git a/aegisub/src/frame_main.cpp b/aegisub/src/frame_main.cpp
index 2e4bc43ed..d4119056d 100644
--- a/aegisub/src/frame_main.cpp
+++ b/aegisub/src/frame_main.cpp
@@ -82,12 +82,20 @@
 #endif
 
 
+
+#ifdef WITH_STARTUPLOG
+#define StartupLog(a) MessageBox(0, a, _T("Aegisub startup log"), 0)
+#else
+#define StartupLog(a)
+#endif
+
 /////////////////////////
 // FrameMain constructor
 
 FrameMain::FrameMain (wxArrayString args)
 : wxFrame ((wxFrame*)NULL,-1,_T(""),wxDefaultPosition,wxSize(920,700),wxDEFAULT_FRAME_STYLE | wxCLIP_CHILDREN)
 {
+	StartupLog(_T("Entering FrameMain constructor"));
 #ifdef __WXGTK__
 /* XXX HACK XXX
  * Gtk just got initialized. And if we're using the SCIM IME,
@@ -102,6 +110,7 @@ FrameMain::FrameMain (wxArrayString args)
 	// Set application's frame
 	AegisubApp::Get()->frame = this;
 
+	StartupLog(_T("Create log window"));
 	LogWindow = new wxLogWindow(this, _T("Aegisub log window"), false);
 
 	// Initialize flags
@@ -110,24 +119,31 @@ FrameMain::FrameMain (wxArrayString args)
 	blockAudioLoad = false;
 	blockAudioLoad = false;
 
+	StartupLog(_T("Install PNG handler"));
 	// Create PNG handler
 	wxPNGHandler *png = new wxPNGHandler;
 	wxImage::AddHandler(png);
 
 	// Storage for subs-file-local scripts
 #ifdef WITH_AUTOMATION
+	StartupLog(_T("Create local Automation script manager"));
 	local_scripts = new Automation4::ScriptManager();
 #endif
 
 	// Create menu and tool bars
+	StartupLog(_T("Apply saved Maximized state"));
 	if (Options.AsBool(_T("Maximized"))) Maximize(true);
+	StartupLog(_T("Initialize toolbar"));
 	InitToolbar();
+	StartupLog(_T("Initialize menu bar"));
 	InitMenu();
 	
 	// Create status bar
+	StartupLog(_T("Create status bar"));
 	CreateStatusBar(2);
 
 	// Set icon
+	StartupLog(_T("Set icon"));
 	SetIcon(wxICON(wxicon));
 
 	// Contents
@@ -135,7 +151,9 @@ FrameMain::FrameMain (wxArrayString args)
 	showAudio = true;
 	detachedVideo = NULL;
 	stylingAssistant = NULL;
+	StartupLog(_T("Initialize inner main window controls"));
 	InitContents();
+	StartupLog(_T("Display main window"));
 	Show();
 
 	// Splash screen
@@ -153,6 +171,7 @@ FrameMain::FrameMain (wxArrayString args)
 	wxSafeYield();
 
 	// Set autosave timer
+	StartupLog(_T("Set up Auto Save"));
 	AutoSave.SetOwner(this,AutoSave_Timer);
 	int time = Options.AsInt(_T("Auto save every seconds"));
 	if (time > 0) {
@@ -160,19 +179,24 @@ FrameMain::FrameMain (wxArrayString args)
 	}
 
 	// Set accelerator keys
+	StartupLog(_T("Install hotkeys"));
 	PreviousFocus = NULL;
 	SetAccelerators();
 
 	// Set drop target
+	StartupLog(_T("Set up drag/drop target"));
 	SetDropTarget(new AegisubFileDropTarget(this));
 
 	// Parse arguments
+	StartupLog(_T("Initialize empty file"));
 	LoadSubtitles(_T(""));
+	StartupLog(_T("Load files specified on command line"));
 	LoadList(args);
 
 	// Version checker
 	// Fails on non-Windows platforms with a crash
 #ifdef __WXMSW__
+	StartupLog(_T("Possibly perform automatic updates check"));
 	int option = Options.AsInt(_T("Auto check for updates"));
 	if (option == -1) {
 		int result = wxMessageBox(_("Do you want Aegisub to check for updates whenever it starts? You can still do it manually via the Help menu."),_("Check for updates?"),wxYES_NO);
@@ -188,6 +212,7 @@ FrameMain::FrameMain (wxArrayString args)
 #endif
 
 	//ShowFullScreen(true,wxFULLSCREEN_NOBORDER | wxFULLSCREEN_NOCAPTION);
+	StartupLog(_T("Leaving FrameMain constructor"));
 }
 
 
@@ -527,41 +552,51 @@ void FrameMain::InitMenu() {
 // Initialize contents
 void FrameMain::InitContents() {
 	// Set a background panel
+	StartupLog(_T("Create background panel"));
 	Panel = new wxPanel(this,-1,wxDefaultPosition,wxDefaultSize,wxTAB_TRAVERSAL | wxCLIP_CHILDREN);
 
 	// Initialize sizers
+	StartupLog(_T("Create main sizers"));
 	MainSizer = new wxBoxSizer(wxVERTICAL);
 	TopSizer = new wxBoxSizer(wxHORIZONTAL);
 	BottomSizer = new wxBoxSizer(wxHORIZONTAL);
 
 	// Video area;
+	StartupLog(_T("Create video box"));
 	videoBox = new VideoBox(Panel, false);
 	TopSizer->Add(videoBox,0,wxEXPAND,0);
 	videoBox->videoDisplay->zoomBox = ZoomBox;
 
 	// Subtitles area
+	StartupLog(_T("Create subtitles grid"));
 	SubsBox = new SubtitlesGrid(this,Panel,-1,wxDefaultPosition,wxSize(600,100),wxWANTS_CHARS | wxSUNKEN_BORDER,_T("Subs grid"));
 	BottomSizer->Add(SubsBox,1,wxEXPAND | wxLEFT | wxRIGHT | wxBOTTOM,0);
+	StartupLog(_T("Reset undo stack"));
 	AssFile::StackReset();
 	videoBox->videoSlider->grid = SubsBox;
 	VideoContext::Get()->grid = SubsBox;
+	StartupLog(_T("Reset video zoom"));
 	videoBox->videoDisplay->SetZoomPos(Options.AsInt(_T("Video Default Zoom")));
 	Search.grid = SubsBox;
 
 	// Audio area
+	StartupLog(_T("Create audio box"));
 	audioBox = new AudioBox(Panel);
 	audioBox->frameMain = this;
 	VideoContext::Get()->audio = audioBox->audioDisplay;
 
 	// Top sizer
+	StartupLog(_T("Create subtitle editing box"));
 	EditBox = new SubsEditBox(Panel,SubsBox);
 	EditBox->audio = audioBox->audioDisplay;
+	StartupLog(_T("Arrange controls in sizers"));
 	ToolSizer = new wxBoxSizer(wxVERTICAL);
 	ToolSizer->Add(audioBox,0,wxEXPAND | wxBOTTOM,5);
 	ToolSizer->Add(EditBox,1,wxEXPAND,5);
 	TopSizer->Add(ToolSizer,1,wxEXPAND | wxLEFT | wxRIGHT | wxBOTTOM,5);
 
 	// Set sizers/hints
+	StartupLog(_T("Arrange main sizers"));
 	MainSizer->Add(new wxStaticLine(Panel),0,wxEXPAND | wxALL,0);
 	MainSizer->Add(TopSizer,0,wxEXPAND | wxALL,0);
 	MainSizer->Add(BottomSizer,1,wxEXPAND | wxALL,0);
@@ -570,9 +605,13 @@ void FrameMain::InitContents() {
 	//SetSizer(MainSizer);
 
 	// Set display
+	StartupLog(_T("Set display mode"));
 	SetDisplayMode(0,0);
+	StartupLog(_T("Perform layout"));
 	Layout();
+	StartupLog(_T("Set focus to edting box"));
 	EditBox->TextEdit->SetFocus();
+	StartupLog(_T("Leaving InitContents"));
 }
 
 
diff --git a/aegisub/src/main.cpp b/aegisub/src/main.cpp
index 2940c2ec9..dfa5d081b 100644
--- a/aegisub/src/main.cpp
+++ b/aegisub/src/main.cpp
@@ -76,16 +76,8 @@
 IMPLEMENT_APP(AegisubApp)
 
 
-#if 0
-void StartupLog(const wxString &msg) {
-	static wxStopWatch clock;
-	wxString nmsg = wxString::Format(_T("Startup: %d - %s\n"), clock.Time(), msg.c_str());
-#ifdef WIN32
-	OutputDebugStringW(nmsg.wc_str());
-#else
-	printf(nmsg.mb_str(wxConvLocal));
-#endif
-}
+#ifdef WITH_STARTUPLOG
+#define StartupLog(a) MessageBox(0, a, _T("Aegisub startup log"), 0)
 #else
 #define StartupLog(a)
 #endif