Index: mptrack/MainFrm.cpp
===================================================================
--- mptrack/MainFrm.cpp	(revision 20463)
+++ mptrack/MainFrm.cpp	(working copy)
@@ -375,6 +375,10 @@
 		}
 	}
 
+#if defined(MPT_ENABLE_UPDATE)
+	m_cancelUpdateCheck = true;
+#endif // MPT_ENABLE_UPDATE
+
 	CChildFrame *pMDIActive = (CChildFrame *)MDIGetActive();
 
 	BeginWaitCursor();
@@ -400,6 +404,10 @@
 		m_InputHandler->m_activeCommandSet->SaveFile(TrackerSettings::Instance().m_szKbdFile);
 	}
 
+#if defined(MPT_ENABLE_UPDATE)
+	CUpdateCheck::WaitForUpdateCheckFinished();
+#endif // MPT_ENABLE_UPDATE
+
 	EndWaitCursor();
 	CMDIFrameWnd::OnClose();
 }
@@ -2765,6 +2773,10 @@
 
 LRESULT CMainFrame::OnUpdateCheckProgress(WPARAM wparam, LPARAM lparam)
 {
+	if(m_cancelUpdateCheck)
+	{
+		return FALSE;
+	}
 	bool isAutoUpdate = wparam != 0;
 	CString updateText = MPT_CFORMAT("Checking for updates... {}%")(lparam);
 	if(isAutoUpdate)
Index: mptrack/Mainfrm.h
===================================================================
--- mptrack/Mainfrm.h	(revision 20463)
+++ mptrack/Mainfrm.h	(working copy)
@@ -191,6 +191,7 @@
 #if defined(MPT_ENABLE_UPDATE)
 	class CUpdateSetupDlg *m_UpdateOptionsDialog = nullptr;
 	std::unique_ptr<UpdateCheckResult> m_updateCheckResult;
+	bool m_cancelUpdateCheck = false;
 #endif // MPT_ENABLE_UPDATE
 	DWORD helpCookie = 0;
 	bool m_bOptionsLocked = false;
Index: mptrack/UpdateCheck.cpp
===================================================================
--- mptrack/UpdateCheck.cpp	(revision 20463)
+++ mptrack/UpdateCheck.cpp	(working copy)
@@ -462,6 +462,24 @@
 }
 
 
+void CUpdateCheck::WaitForUpdateCheckFinished()
+{
+	while(GetNumCurrentRunningInstances() > 0)
+	{
+		MSG msg;
+		while(::PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
+		{
+			::TranslateMessage(&msg);
+			::DispatchMessage(&msg);
+		}
+		if(GetNumCurrentRunningInstances() > 0)
+		{
+			Sleep(1);
+		}
+	}
+}
+
+
 // Start update check
 void CUpdateCheck::StartUpdateCheckAsync(bool isAutoUpdate)
 {
Index: mptrack/UpdateCheck.h
===================================================================
--- mptrack/UpdateCheck.h	(revision 20463)
+++ mptrack/UpdateCheck.h	(working copy)
@@ -62,7 +62,7 @@
 	static std::vector<mpt::ustring> GetDefaultUpdateSigningKeysRootAnchors();
 	static mpt::ustring GetDefaultAPIURL();
 	
-	int32 GetNumCurrentRunningInstances();
+	static int32 GetNumCurrentRunningInstances();
 
 	static bool IsSuitableUpdateMoment();
 
@@ -69,6 +69,8 @@
 	static void DoAutoUpdateCheck() { StartUpdateCheckAsync(true); }
 	static void DoManualUpdateCheck() { StartUpdateCheckAsync(false); }
 
+	static void WaitForUpdateCheckFinished();
+
 public:
 
 	struct Context
