diff --git a/aegisub/src/dialog_detached_video.cpp b/aegisub/src/dialog_detached_video.cpp
index 9f5109423b74a8aed2770f8a8fe7af8484d311c1..0572b730e35b7a1d3dfc76e8c19199a5f8d693ca 100644
--- a/aegisub/src/dialog_detached_video.cpp
+++ b/aegisub/src/dialog_detached_video.cpp
@@ -66,6 +66,8 @@ DialogDetachedVideo::DialogDetachedVideo(agi::Context *context)
 
 	SetTitle(wxString::Format(_("Video: %s"), wxFileName(context->videoController->GetVideoName()).GetFullName()));
 
+	old_display->Unload();
+
 	// Video area;
 	VideoBox *videoBox = new VideoBox(this, true, context);
 	context->videoDisplay->SetMinClientSize(old_display->GetClientSize());
@@ -103,17 +105,16 @@ DialogDetachedVideo::DialogDetachedVideo(agi::Context *context)
 DialogDetachedVideo::~DialogDetachedVideo() { }
 
 void DialogDetachedVideo::OnClose(wxCloseEvent &evt) {
-	// Deleting a GL context seems to invalidate ALL contexts, so we need to
-	// delete both the detached and undetached contexts here, then recreate
-	// the undetached one later
 	context->videoDisplay->Destroy();
-	old_display->Reload();
 
 	context->videoDisplay = old_display;
 	context->videoSlider = old_slider;
 
 	OPT_SET("Video/Detached/Enabled")->SetBool(false);
 
+	if (context->videoController->IsLoaded())
+		context->videoController->JumpToFrame(context->videoController->GetFrameN());
+
 	evt.Skip();
 }
 
diff --git a/aegisub/src/video_display.cpp b/aegisub/src/video_display.cpp
index 4c9335050e06dd8fe50e67e5fb6f418b60437465..97aa08d16de3ec054e1dd36efe212cb3f816c20f 100644
--- a/aegisub/src/video_display.cpp
+++ b/aegisub/src/video_display.cpp
@@ -420,11 +420,8 @@ Vector2D VideoDisplay::GetMousePosition() const {
 	return mouse_pos ? tool->ToScriptCoords(mouse_pos) : mouse_pos;
 }
 
-void VideoDisplay::Reload() {
+void VideoDisplay::Unload() {
 	glContext.reset();
 	videoOut.reset();
 	tool.reset();
-
-	if (con->videoController->IsLoaded())
-		con->videoController->JumpToFrame(con->videoController->GetFrameN());
 }
diff --git a/aegisub/src/video_display.h b/aegisub/src/video_display.h
index 05a8b911b581811f31b667e6c5c68fb9fefdd86f..05b032a491d2a3076f5ca7ce14542183fbf323b4 100644
--- a/aegisub/src/video_display.h
+++ b/aegisub/src/video_display.h
@@ -171,5 +171,5 @@ public:
 	bool ToolIsType(std::type_info const& type) const;
 
 	/// Discard all OpenGL state
-	void Reload();
+	void Unload();
 };