diff --git a/aegisub/audio_provider_hd.cpp b/aegisub/audio_provider_hd.cpp
index d79c425344ee42b2ffc6207f652ff25254e06a71..10ea95ed60edc08c670ac596fdcdf463efa21855 100644
--- a/aegisub/audio_provider_hd.cpp
+++ b/aegisub/audio_provider_hd.cpp
@@ -44,6 +44,8 @@
 #include "standard_paths.h"
 #include "options.h"
 #include "utils.h"
+#include "frame_main.h"
+#include "main.h"
 
 
 ///////////////
@@ -72,7 +74,7 @@ HDAudioProvider::HDAudioProvider(AudioProvider *source) {
 
 	// Start progress
 	volatile bool canceled = false;
-	DialogProgress *progress = new DialogProgress(NULL,_T("Load audio"),&canceled,_T("Reading to Hard Disk cache"),0,num_samples);
+	DialogProgress *progress = new DialogProgress(AegisubApp::Get()->frame,_T("Load audio"),&canceled,_T("Reading to Hard Disk cache"),0,num_samples);
 	progress->Show();
 
 	// Write to disk
diff --git a/aegisub/audio_provider_ram.cpp b/aegisub/audio_provider_ram.cpp
index 0e5550f7c9b9747065fe28e0b99921b4f01e1fb7..6a960db9bd19981bfc3bbed7f9329c9a7030a5f9 100644
--- a/aegisub/audio_provider_ram.cpp
+++ b/aegisub/audio_provider_ram.cpp
@@ -39,6 +39,8 @@
 #include "dialog_progress.h"
 #include "audio_provider_ram.h"
 #include "utils.h"
+#include "frame_main.h"
+#include "main.h"
 
 
 ///////////
@@ -82,7 +84,7 @@ RAMAudioProvider::RAMAudioProvider(AudioProvider *source) {
 
 	// Start progress
 	volatile bool canceled = false;
-	DialogProgress *progress = new DialogProgress(NULL,_("Load audio"),&canceled,_("Reading into RAM"),0,source->GetNumSamples());
+	DialogProgress *progress = new DialogProgress(AegisubApp::Get()->frame,_("Load audio"),&canceled,_("Reading into RAM"),0,source->GetNumSamples());
 	progress->Show();
 	progress->SetProgress(0,1);
 
diff --git a/aegisub/dialog_progress.cpp b/aegisub/dialog_progress.cpp
index 00ddcdeef4269e7603071e03157f5c8d60ce39a6..4bde8fb3f14fec3882f9709afee4e095c1b3e41e 100644
--- a/aegisub/dialog_progress.cpp
+++ b/aegisub/dialog_progress.cpp
@@ -39,6 +39,7 @@
 #include <wx/button.h>
 #include <wx/sizer.h>
 #include "dialog_progress.h"
+#include "utils.h"
 
 
 DEFINE_EVENT_TYPE(wxEVT_PROGRESS_UPDATE)
@@ -82,7 +83,7 @@ void DialogProgress::SetProgress(int cur,int max) {
 
 	// Check if it's the main thread, if so, just process it now
 	if (wxIsMainThread()) {
-		gauge->SetValue(value);
+		gauge->SetValue(MID(0,value,100));
 		wxYield();
 		return;
 	}
@@ -105,7 +106,7 @@ void DialogProgress::SetProgress(int cur,int max) {
 void DialogProgress::OnUpdateProgress(wxCommandEvent &event)
 {
 	int value = event.GetInt();
-	if (gauge->GetValue() != value) gauge->SetValue(value);
+	if (gauge->GetValue() != value) gauge->SetValue(MID(0,value,100));
 	wxMutexLocker locker(mutex);
 	count--;
 }