diff --git a/aegisub/src/video_display.cpp b/aegisub/src/video_display.cpp
index d2cfae86e80ae4c777cabe58957a1e518042c10b..83d982064011587667eb8b50297f8ca0314eceef 100644
--- a/aegisub/src/video_display.cpp
+++ b/aegisub/src/video_display.cpp
@@ -320,8 +320,11 @@ void VideoDisplay::UpdateSize() {
 	if (freeSize) {
 		wxWindow *top = GetParent();
 		while (!top->IsTopLevel()) top = top->GetParent();
-		top->SetSize(top->GetSize() + videoSize - GetClientSize());
-		SetClientSize(videoSize);
+
+		wxSize cs = GetClientSize();
+		wxSize oldSize = top->GetSize();
+		top->SetSize(top->GetSize() + videoSize - cs);
+		SetClientSize(cs + top->GetSize() - oldSize);
 	}
 	else {
 		SetMinClientSize(videoSize);
@@ -380,7 +383,7 @@ void VideoDisplay::OnKeyDown(wxKeyEvent &event) {
 
 void VideoDisplay::SetZoom(double value) {
 	zoomValue = std::max(value, .125);
-	size_t selIndex = value / .125 - 1;
+	size_t selIndex = zoomValue / .125 - 1;
 	if (selIndex < zoomBox->GetCount())
 		zoomBox->SetSelection(selIndex);
 	zoomBox->ChangeValue(wxString::Format("%g%%", zoomValue * 100.));