Index: common/BuildSettings.h
===================================================================
--- common/BuildSettings.h	(revision 11890)
+++ common/BuildSettings.h	(working copy)
@@ -20,36 +20,10 @@
 
 #if MPT_OS_WINDOWS
 
-#if defined(MPT_BUILD_MSVC)
-
-#if defined(MPT_BUILD_TARGET_XP)
-
-#if defined(_M_X64)
 #ifndef _WIN32_WINNT
-#define _WIN32_WINNT 0x0502 // _WIN32_WINNT_WS03
-#endif
-#else // !_M_X64
-#ifndef _WIN32_WINNT
-#define _WIN32_WINNT 0x0501 // _WIN32_WINNT_WINXP
-#endif
-#endif // _M_X64
-
-#else // MPT_BUILD_TARGET
-
-#ifndef _WIN32_WINNT
 #define _WIN32_WINNT 0x0601 // _WIN32_WINNT_WIN7
 #endif
 
-#endif // MPT_BUILD_TARGET
-
-#else // !MPT_BUILD_MSVC
-
-#ifndef _WIN32_WINNT
-#define _WIN32_WINNT 0x0501 // _WIN32_WINNT_WINXP
-#endif
-
-#endif // MPT_BUILD_MSVC
-
 #ifndef WINVER
 #define WINVER       _WIN32_WINNT
 #endif
@@ -121,10 +95,8 @@
 //#define MPT_WITH_ICONV
 //#define MPT_WITH_LTDL
 #if MPT_OS_WINDOWS
-#if (_WIN32_WINNT >= 0x0601)
 #define MPT_WITH_MEDIAFOUNDATION
 #endif
-#endif
 //#define MPT_WITH_MINIMP3
 //#define MPT_WITH_MINIZ
 #define MPT_WITH_MPG123
Index: common/mptLibrary.cpp
===================================================================
--- common/mptLibrary.cpp	(revision 11890)
+++ common/mptLibrary.cpp	(working copy)
@@ -100,7 +100,7 @@
 		if(WindowsVersion.IsAtLeast(mpt::Windows::Version::Win8))
 		{
 			hasKB2533623 = true;
-		} else if(WindowsVersion.IsAtLeast(mpt::Windows::Version::WinVista))
+		} else
 		{
 			HMODULE hKernel32DLL = LoadLibraryW(L"kernel32.dll");
 			if(hKernel32DLL)
Index: mptrack/AdvancedConfigDlg.cpp
===================================================================
--- mptrack/AdvancedConfigDlg.cpp	(revision 11890)
+++ mptrack/AdvancedConfigDlg.cpp	(working copy)
@@ -170,11 +170,7 @@
 			if(gi == m_groups.end())
 			{
 				LVGROUP group;
-	#if _WIN32_WINNT >= 0x0600
 				group.cbSize = LVGROUP_V5_SIZE;
-	#else
-				group.cbSize = sizeof(group);
-	#endif
 				group.mask = LVGF_HEADER | LVGF_GROUPID;
 #if MPT_USTRING_MODE_WIDE
 				group.pszHeader = const_cast<wchar_t *>(section.c_str());
Index: mptrack/BuildVariants.cpp
===================================================================
--- mptrack/BuildVariants.cpp	(revision 11890)
+++ mptrack/BuildVariants.cpp	(working copy)
@@ -62,10 +62,10 @@
 	std::vector<BuildVariant> result
 	{
 		// VS2017
-		{ 1, U_("win32old"), false, mpt::Windows::Architecture::x86  , PROCSUPPORT_i586    , 0, 0, mpt::Windows::Version::WinXP   , mpt::Windows::Version::WinXP  , mpt::Wine::Version(1,8,0) },
-		{ 1, U_("win64old"), false, mpt::Windows::Architecture::amd64, PROCSUPPORT_AMD64   , 2, 0, mpt::Windows::Version::WinXP64 , mpt::Windows::Version::WinXP64, mpt::Wine::Version(1,8,0) },
-		{ 2, U_("win32"   ), true , mpt::Windows::Architecture::x86  , PROCSUPPORT_x86_SSE2, 2, 0, mpt::Windows::Version::WinVista, mpt::Windows::Version::Win7   , mpt::Wine::Version(1,8,0) },
-		{ 2, U_("win64"   ), true , mpt::Windows::Architecture::amd64, PROCSUPPORT_AMD64   , 2, 0, mpt::Windows::Version::WinVista, mpt::Windows::Version::Win7   , mpt::Wine::Version(1,8,0) },
+		{ 1, U_("win32old"), false, mpt::Windows::Architecture::x86  , PROCSUPPORT_x86_SSE2, 2, 0, mpt::Windows::Version::WinXP   , mpt::Windows::Version::Win7 , mpt::Wine::Version(1,8,0) },
+		{ 1, U_("win64old"), false, mpt::Windows::Architecture::amd64, PROCSUPPORT_AMD64   , 2, 0, mpt::Windows::Version::WinXP64 , mpt::Windows::Version::Win7 , mpt::Wine::Version(1,8,0) },
+		{ 2, U_("win32"   ), true , mpt::Windows::Architecture::x86  , PROCSUPPORT_x86_SSE2, 2, 0, mpt::Windows::Version::WinVista, mpt::Windows::Version::Win10, mpt::Wine::Version(3,0,0) },
+		{ 2, U_("win64"   ), true , mpt::Windows::Architecture::amd64, PROCSUPPORT_AMD64   , 2, 0, mpt::Windows::Version::WinVista, mpt::Windows::Version::Win10, mpt::Wine::Version(3,0,0) },
 	};
 	std::stable_sort(result.begin(), result.end(), CompareBuildVariantsByScore);
 	return result;
Index: mptrack/ExceptionHandler.cpp
===================================================================
--- mptrack/ExceptionHandler.cpp	(revision 11890)
+++ mptrack/ExceptionHandler.cpp	(working copy)
@@ -669,7 +669,6 @@
 
 void ExceptionHandler::ConfigureSystemHandler()
 {
-#if (_WIN32_WINNT >= 0x0600)
 	if(delegateToWindowsHandler)
 	{
 		//SetErrorMode(0);
@@ -678,15 +677,6 @@
 	{
 		g_OriginalErrorMode = ::SetErrorMode(::GetErrorMode() | SEM_FAILCRITICALERRORS | SEM_NOGPFAULTERRORBOX);
 	}
-#else // _WIN32_WINNT < 0x0600
-	if(delegateToWindowsHandler)
-	{
-		g_OriginalErrorMode = ::SetErrorMode(0);
-	} else
-	{
-		g_OriginalErrorMode = ::SetErrorMode(::SetErrorMode(0) | SEM_FAILCRITICALERRORS | SEM_NOGPFAULTERRORBOX);
-	}
-#endif // _WIN32_WINNT
 }
 
 
Index: mptrack/HTTP.cpp
===================================================================
--- mptrack/HTTP.cpp	(revision 11890)
+++ mptrack/HTTP.cpp	(working copy)
@@ -447,25 +447,6 @@
 }
 
 
-Request &Request::InsecureTLSDowngradeWindowsXP()
-{
-	if(mpt::Windows::IsOriginal() && mpt::Windows::Version::Current().IsBefore(mpt::Windows::Version::WinVista))
-	{
-		// TLS 1.0 is not enabled by default until IE7. Since WinInet won't let us override this setting, we cannot assume that HTTPS
-		// is going to work on older systems. Besides... Windows XP is already enough of a security risk by itself. :P
-		if(protocol == Protocol::HTTPS)
-		{
-			protocol = Protocol::HTTP;
-		}
-		if(port == Port::HTTPS)
-		{
-			port = Port::HTTP;
-		}
-	}
-	return *this;
-}
-
-
 Result SimpleGet(InternetSession &internet, Protocol protocol, const mpt::ustring &host, const mpt::ustring &path)
 {
 	HTTP::Request request;
Index: mptrack/HTTP.h
===================================================================
--- mptrack/HTTP.h	(revision 11890)
+++ mptrack/HTTP.h	(working copy)
@@ -177,7 +177,6 @@
 	mpt::const_byte_span data;
 
 	Request &SetURI(const URI &uri);
-	Request &InsecureTLSDowngradeWindowsXP();
 
 	Result operator()(InternetSession &internet) const;
 };
Index: mptrack/Image.cpp
===================================================================
--- mptrack/Image.cpp	(revision 11890)
+++ mptrack/Image.cpp	(working copy)
@@ -61,29 +61,7 @@
 static CComPtr<IStream> GetStream(mpt::const_byte_span data)
 {
 	CComPtr<IStream> stream;
-#if (_WIN32_WINNT >= _WIN32_WINNT_VISTA)
 	stream.Attach(SHCreateMemStream(mpt::byte_cast<const unsigned char*>(data.data()), mpt::saturate_cast<UINT>(data.size())));
-#else
-	HGLOBAL hGlobal = GlobalAlloc(GMEM_MOVEABLE | GMEM_ZEROINIT, data.size());
-	if(hGlobal == NULL)
-	{
-		throw bad_image();
-	}
-	void * mem = GlobalLock(hGlobal);
-	if(!mem)
-	{
-		hGlobal = GlobalFree(hGlobal);
-		throw bad_image();
-	}
-	std::memcpy(mem, data.data(), data.size());
-	GlobalUnlock(hGlobal);
-	if(CreateStreamOnHGlobal(hGlobal, TRUE, &stream) != S_OK)
-	{
-		hGlobal = GlobalFree(hGlobal);
-		throw bad_image();
-	}
-	hGlobal = NULL;
-#endif
 	if(!stream)
 	{
 		throw bad_image();
Index: mptrack/MPTrackLink.cpp
===================================================================
--- mptrack/MPTrackLink.cpp	(revision 11890)
+++ mptrack/MPTrackLink.cpp	(working copy)
@@ -16,9 +16,7 @@
 #if defined(MPT_BUILD_MSVC)
 #if MPT_COMPILER_MSVC || MPT_COMPILER_CLANG
 
-#if !defined(MPT_BUILD_TARGET_XP)
 #pragma comment(lib, "delayimp.lib")
-#endif // !MPT_BUILD_TARGET_XP
 
 #pragma comment(lib, "version.lib")
 #pragma comment(lib, "rpcrt4.lib")
@@ -32,6 +30,7 @@
 #pragma comment(lib, "dmoguids.lib")
 #pragma comment(lib, "strmiids.lib")
 
+#pragma comment(lib, "avrt.lib")
 #pragma comment(lib, "dsound.lib")
 #pragma comment(lib, "winmm.lib")
 
Index: mptrack/UpdateCheck.cpp
===================================================================
--- mptrack/UpdateCheck.cpp	(revision 11890)
+++ mptrack/UpdateCheck.cpp	(working copy)
@@ -358,7 +358,7 @@
 	request.method = HTTP::Method::Get;
 	request.flags = HTTP::NoCache;
 
-	HTTP::Result resultHTTP = internet(request.InsecureTLSDowngradeWindowsXP());
+	HTTP::Result resultHTTP = internet(request);
 
 	if(settings.sendStatistics)
 	{
@@ -377,7 +377,7 @@
 		std::string jsondata = GetStatisticsDataV3(settings);
 		MPT_LOG(LogInformation, "Update", mpt::ToUnicode(mpt::CharsetUTF8, jsondata));
 		requestStatistics.data = mpt::byte_cast<mpt::const_byte_span>(mpt::as_span(jsondata));
-		internet(requestStatistics.InsecureTLSDowngradeWindowsXP());
+		internet(requestStatistics);
 	}
 
 	// Retrieve HTTP status code.
Index: mptrack/wine/Native.cpp
===================================================================
--- mptrack/wine/Native.cpp	(revision 11890)
+++ mptrack/wine/Native.cpp	(working copy)
@@ -16,6 +16,7 @@
 
 #pragma comment(lib, "strmiids.lib")
 
+#pragma comment(lib, "avrt.lib")
 #pragma comment(lib, "dsound.lib")
 #pragma comment(lib, "winmm.lib")
 
Index: sounddev/SoundDeviceDirectSound.cpp
===================================================================
--- sounddev/SoundDeviceDirectSound.cpp	(revision 11890)
+++ sounddev/SoundDeviceDirectSound.cpp	(working copy)
@@ -109,10 +109,10 @@
 	info.apiName = U_("DirectSound");
 	info.useNameAsIdentifier = false;
 	info.flags = {
-		sysInfo.SystemClass == mpt::OS::Class::Windows ? sysInfo.IsWindowsOriginal() && sysInfo.WindowsVersion.IsBefore(mpt::Windows::Version::Win7) ? Info::Usability::Usable : Info::Usability::Deprecated : Info::Usability::NotAvailable,
+		sysInfo.SystemClass == mpt::OS::Class::Windows ? Info::Usability::Deprecated : Info::Usability::NotAvailable,
 		Info::Level::Primary,
 		sysInfo.SystemClass == mpt::OS::Class::Windows && sysInfo.IsWindowsWine() ? Info::Compatible::Yes : Info::Compatible::No,
-		sysInfo.SystemClass == mpt::OS::Class::Windows ? sysInfo.IsWindowsWine() ? Info::Api::Emulated : sysInfo.WindowsVersion.IsAtLeast(mpt::Windows::Version::WinVista) ? Info::Api::Emulated : Info::Api::Native : Info::Api::Emulated,
+		Info::Api::Emulated,
 		Info::Io::OutputOnly,
 		Info::Mixing::Software,
 		Info::Implementor::OpenMPT
@@ -165,7 +165,7 @@
 	caps.HasNamedInputSources = false;
 	caps.CanDriverPanel = false;
 	caps.ExclusiveModeDescription = U_("Use primary buffer");
-	caps.DefaultSettings.sampleFormat = (GetSysInfo().IsOriginal() && GetSysInfo().WindowsVersion.IsAtLeast(mpt::Windows::Version::WinVista)) ? SampleFormatFloat32 : SampleFormatInt16;
+	caps.DefaultSettings.sampleFormat = GetSysInfo().IsOriginal() ? SampleFormatFloat32 : SampleFormatInt16;
 	IDirectSound *dummy = nullptr;
 	IDirectSound *ds = nullptr;
 	if(m_piDS)
@@ -244,14 +244,13 @@
 				}
 			}
 		}
-		if(GetSysInfo().IsOriginal() && GetSysInfo().WindowsVersion.IsAtLeast(mpt::Windows::Version::WinVista))
+		if(GetSysInfo().IsOriginal())
 		{
-			// Vista
 			caps.supportedSampleFormats = { SampleFormatFloat32 };
 			caps.supportedExclusiveModeSampleFormats = { SampleFormatFloat32 };
 		} else if(!(dscaps.dwFlags & DSCAPS_EMULDRIVER))
 		{
-			// XP wdm
+			// Wine wdm-style
 			caps.supportedSampleFormats = { SampleFormatFloat32, SampleFormatInt32, SampleFormatInt24, SampleFormatInt16, SampleFormatUnsigned8 };
 			caps.supportedExclusiveModeSampleFormats.clear();
 			if(dscaps.dwFlags & DSCAPS_PRIMARY8BIT)
@@ -268,7 +267,7 @@
 			}
 		} else
 		{
-			// XP vdx
+			// Wine vdx-style
 			// nothing, announce all, fail later
 			caps.supportedSampleFormats = { SampleFormatFloat32, SampleFormatInt32, SampleFormatInt24, SampleFormatInt16, SampleFormatUnsigned8 };
 			caps.supportedExclusiveModeSampleFormats = { SampleFormatFloat32, SampleFormatInt32, SampleFormatInt24, SampleFormatInt16, SampleFormatUnsigned8 };
@@ -386,7 +385,7 @@
 	}
 	m_dwWritePos = 0xFFFFFFFF;
 	SetWakeupInterval(std::min(m_Settings.UpdateInterval, m_nDSoundBufferSize / (2.0 * m_Settings.GetBytesPerSecond())));
-	m_Flags.NeedsClippedFloat = (GetSysInfo().IsOriginal() && GetSysInfo().WindowsVersion.IsAtLeast(mpt::Windows::Version::WinVista));
+	m_Flags.NeedsClippedFloat = GetSysInfo().IsOriginal();
 	return true;
 }
 
Index: sounddev/SoundDevicePortAudio.cpp
===================================================================
--- sounddev/SoundDevicePortAudio.cpp	(revision 11890)
+++ sounddev/SoundDevicePortAudio.cpp	(working copy)
@@ -160,10 +160,10 @@
 		framesPerBuffer = paFramesPerBufferUnspecified; // let portaudio choose
 	} else if(m_HostApiType == paMME)
 	{
-		m_Flags.NeedsClippedFloat = (GetSysInfo().IsOriginal() && GetSysInfo().WindowsVersion.IsAtLeast(mpt::Windows::Version::WinVista));
+		m_Flags.NeedsClippedFloat = GetSysInfo().IsOriginal();
 	} else if(m_HostApiType == paDirectSound)
 	{
-		m_Flags.NeedsClippedFloat = (GetSysInfo().IsOriginal() && GetSysInfo().WindowsVersion.IsAtLeast(mpt::Windows::Version::WinVista));
+		m_Flags.NeedsClippedFloat = GetSysInfo().IsOriginal();
 	} else
 	{
 		m_Flags.NeedsClippedFloat = false;
@@ -406,7 +406,7 @@
 		caps.DefaultSettings.sampleFormat = SampleFormatInt32;
 	} else if(m_HostApiType == paDirectSound)
 	{
-		if(GetSysInfo().IsOriginal() && GetSysInfo().WindowsVersion.IsAtLeast(mpt::Windows::Version::WinVista))
+		if(GetSysInfo().IsOriginal())
 		{
 			caps.DefaultSettings.sampleFormat = SampleFormatFloat32;
 		} else
@@ -415,11 +415,8 @@
 		}
 	} else if(m_HostApiType == paMME)
 	{
-		if(GetSysInfo().IsWine)
+		if(GetSysInfo().IsOriginal())
 		{
-			caps.DefaultSettings.sampleFormat = SampleFormatInt16;
-		} else if(GetSysInfo().WindowsVersion.IsAtLeast(mpt::Windows::Version::WinVista))
-		{
 			caps.DefaultSettings.sampleFormat = SampleFormatFloat32;
 		} else
 		{
@@ -431,13 +428,13 @@
 	}
 	if(m_HostApiType == paDirectSound)
 	{
-		if(GetSysInfo().IsOriginal() && GetSysInfo().WindowsVersion.IsAtLeast(mpt::Windows::Version::WinVista))
+		if(GetSysInfo().IsOriginal())
 		{
 			caps.HasInternalDither = false;
 		}
 	} else if(m_HostApiType == paMME)
 	{
-		if(GetSysInfo().IsOriginal() && GetSysInfo().WindowsVersion.IsAtLeast(mpt::Windows::Version::WinVista))
+		if(GetSysInfo().IsOriginal())
 		{
 			caps.HasInternalDither = false;
 		}
@@ -481,13 +478,13 @@
 	}
 	if(m_HostApiType == paDirectSound)
 	{
-		if(GetSysInfo().IsOriginal() && GetSysInfo().WindowsVersion.IsAtLeast(mpt::Windows::Version::WinVista))
+		if(GetSysInfo().IsOriginal())
 		{
 			caps.supportedSampleFormats = { SampleFormatFloat32 };
 		}
 	} else if(m_HostApiType == paMME)
 	{
-		if(GetSysInfo().IsOriginal() && GetSysInfo().WindowsVersion.IsAtLeast(mpt::Windows::Version::WinVista))
+		if(GetSysInfo().IsOriginal())
 		{
 			caps.supportedSampleFormats = { SampleFormatFloat32 };
 		}
@@ -615,7 +612,6 @@
 	{
 		return false;
 	}
-	bool hasVista = GetSysInfo().WindowsVersion.IsAtLeast(mpt::Windows::Version::WinVista);
 	mpt::PathString controlEXE;
 	TCHAR systemDir[MAX_PATH];
 	MemsetZero(systemDir);
@@ -625,7 +621,7 @@
 		controlEXE += P_("\\");
 	}
 	controlEXE += P_("control.exe");
-	return (reinterpret_cast<INT_PTR>(ShellExecute(NULL, TEXT("open"), controlEXE.AsNative().c_str(), (hasVista ? TEXT("/name Microsoft.Sound") : TEXT("mmsys.cpl")), NULL, SW_SHOW)) >= 32);
+	return (reinterpret_cast<INT_PTR>(ShellExecute(NULL, TEXT("open"), controlEXE.AsNative().c_str(), TEXT("/name Microsoft.Sound"), NULL, SW_SHOW)) >= 32);
 #else // !MPT_OS_WINDOWS
 	return false;
 #endif // MPT_OS_WINDOWS
@@ -774,10 +770,10 @@
 		case paDirectSound:
 			result.apiName = U_("DirectSound");
 			result.flags = {
-				sysInfo.SystemClass == mpt::OS::Class::Windows ? sysInfo.IsWindowsOriginal() && sysInfo.WindowsVersion.IsBefore(mpt::Windows::Version::Win7) ? Info::Usability::Usable : Info::Usability::Deprecated : Info::Usability::NotAvailable,
+				sysInfo.SystemClass == mpt::OS::Class::Windows ? Info::Usability::Deprecated : Info::Usability::NotAvailable,
 				Info::Level::Secondary,
 				Info::Compatible::No,
-				sysInfo.SystemClass == mpt::OS::Class::Windows ? sysInfo.IsWindowsWine() ? Info::Api::Emulated : sysInfo.WindowsVersion.IsAtLeast(mpt::Windows::Version::WinVista) ? Info::Api::Emulated : Info::Api::Native : Info::Api::Emulated,
+				Info::Api::Emulated,
 				Info::Io::FullDuplex,
 				Info::Mixing::Software,
 				Info::Implementor::External
@@ -786,10 +782,10 @@
 		case paMME:
 			result.apiName = U_("MME");
 			result.flags = {
-				sysInfo.SystemClass == mpt::OS::Class::Windows ? sysInfo.IsWindowsOriginal() && sysInfo.WindowsVersion.IsBefore(mpt::Windows::Version::Win7) ? Info::Usability::Usable : Info::Usability::Deprecated : Info::Usability::NotAvailable,
+				sysInfo.SystemClass == mpt::OS::Class::Windows ? Info::Usability::Deprecated : Info::Usability::NotAvailable,
 				Info::Level::Secondary,
 				Info::Compatible::No,
-				sysInfo.SystemClass == mpt::OS::Class::Windows ? sysInfo.IsWindowsWine() ? Info::Api::Emulated : sysInfo.WindowsVersion.IsAtLeast(mpt::Windows::Version::WinVista) ? Info::Api::Emulated : Info::Api::Native : Info::Api::Emulated,
+				Info::Api::Emulated,
 				Info::Io::FullDuplex,
 				Info::Mixing::Software,
 				Info::Implementor::External
@@ -849,19 +845,19 @@
 				Info::Usability::Usable,
 				Info::Level::Primary,
 				Info::Compatible::No,
-				sysInfo.SystemClass == mpt::OS::Class::Windows && sysInfo.IsWindowsOriginal() && sysInfo.WindowsVersion.IsBefore(mpt::Windows::Version::WinVista) ? Info::Api::Native : Info::Api::Emulated,
+				Info::Api::Emulated,
 				Info::Io::FullDuplex,
-				sysInfo.SystemClass == mpt::OS::Class::Windows && sysInfo.IsWindowsOriginal() && sysInfo.WindowsVersion.IsBefore(mpt::Windows::Version::WinVista) ? Info::Mixing::Hardware : Info::Mixing::Software,
+				Info::Mixing::Software,
 				Info::Implementor::External
 			};
 			break;
 		case paWDMKS:
-			result.apiName = sysInfo.WindowsVersion.IsAtLeast(mpt::Windows::Version::WinVista) ? U_("WaveRT") : U_("WDM-KS");
+			result.apiName = U_("WaveRT");
 			result.flags = {
-				sysInfo.SystemClass == mpt::OS::Class::Windows ? sysInfo.IsWindowsOriginal() ? sysInfo.WindowsVersion.IsBefore(mpt::Windows::Version::WinVista) ? Info::Usability::Usable : Info::Usability::Usable : Info::Usability::Broken : Info::Usability::NotAvailable,
+				sysInfo.SystemClass == mpt::OS::Class::Windows ? sysInfo.IsWindowsOriginal() ? Info::Usability::Usable : Info::Usability::Broken : Info::Usability::NotAvailable,
 				Info::Level::Primary,
 				Info::Compatible::No,
-				sysInfo.SystemClass == mpt::OS::Class::Windows ? sysInfo.IsWindowsOriginal() ? sysInfo.WindowsVersion.IsBefore(mpt::Windows::Version::WinVista) ? Info::Api::Native : Info::Api::Native : Info::Api::Emulated : Info::Api::Emulated,
+				sysInfo.SystemClass == mpt::OS::Class::Windows ? sysInfo.IsWindowsOriginal() ? Info::Api::Native : Info::Api::Emulated : Info::Api::Emulated,
 				Info::Io::FullDuplex,
 				Info::Mixing::Hardware,
 				Info::Implementor::External
@@ -882,19 +878,7 @@
 		case paWASAPI:
 			result.apiName = U_("WASAPI");
 			result.flags = {
-				sysInfo.SystemClass == mpt::OS::Class::Windows ?
-					sysInfo.IsWindowsOriginal() ?
-						sysInfo.WindowsVersion.IsAtLeast(mpt::Windows::Version::Win7) ?
-							Info::Usability::Usable
-						:
-							sysInfo.WindowsVersion.IsAtLeast(mpt::Windows::Version::WinVista) ?
-								Info::Usability::Experimental
-							:
-								Info::Usability::NotAvailable
-					:
-						Info::Usability::Usable
-				:
-					Info::Usability::NotAvailable,
+				sysInfo.SystemClass == mpt::OS::Class::Windows ? Info::Usability::Usable : Info::Usability::NotAvailable,
 				Info::Level::Primary,
 				Info::Compatible::No,
 				sysInfo.SystemClass == mpt::OS::Class::Windows ? Info::Api::Native : Info::Api::Emulated,
Index: sounddev/SoundDeviceRtAudio.cpp
===================================================================
--- sounddev/SoundDeviceRtAudio.cpp	(revision 11890)
+++ sounddev/SoundDeviceRtAudio.cpp	(working copy)
@@ -116,7 +116,7 @@
 			m_Flags.NeedsClippedFloat = true;
 		} else if(m_RtAudio->getCurrentApi() == RtAudio::Api::WINDOWS_DS)
 		{
-			m_Flags.NeedsClippedFloat = (GetSysInfo().IsOriginal() && GetSysInfo().WindowsVersion.IsAtLeast(mpt::Windows::Version::WinVista));
+			m_Flags.NeedsClippedFloat = GetSysInfo().IsOriginal();
 		}
 		m_RtAudio->openStream((m_OutputStreamParameters.nChannels > 0) ? &m_OutputStreamParameters : nullptr, (m_InputStreamParameters.nChannels > 0) ? &m_InputStreamParameters : nullptr, SampleFormatToRtAudioFormat(m_Settings.sampleFormat), m_Settings.Samplerate, &m_FramesPerChunk, &RtAudioCallback, this, &m_StreamOptions, nullptr);
 	} catch (const RtAudioError &e)
@@ -526,19 +526,7 @@
 				case RtAudio::WINDOWS_WASAPI:
 					info.apiName = U_("WASAPI");
 					info.flags = {
-						sysInfo.SystemClass == mpt::OS::Class::Windows ?
-							sysInfo.IsWindowsOriginal() ?
-								sysInfo.WindowsVersion.IsAtLeast(mpt::Windows::Version::Win7) ?
-									Info::Usability::Usable
-								:
-									sysInfo.WindowsVersion.IsAtLeast(mpt::Windows::Version::WinVista) ?
-										Info::Usability::Experimental
-									:
-										Info::Usability::NotAvailable
-							:
-								Info::Usability::Usable
-						:
-							Info::Usability::NotAvailable,
+						sysInfo.SystemClass == mpt::OS::Class::Windows ? Info::Usability::Usable : Info::Usability::NotAvailable,
 						Info::Level::Secondary,
 						Info::Compatible::No,
 						sysInfo.SystemClass == mpt::OS::Class::Windows ? Info::Api::Native : Info::Api::Emulated,
@@ -562,10 +550,10 @@
 				case RtAudio::WINDOWS_DS:
 					info.apiName = U_("DirectSound");
 					info.flags = {
-						Info::Usability::Broken, // sysInfo.SystemClass == mpt::OS::Class::Windows ? sysInfo.IsWindowsOriginal() && sysInfo.WindowsVersion.IsBefore(mpt::Windows::Version::Win7) ? Info::Usability:Usable : Info::Usability::Deprecated : Info::Usability::NotAvailable,
+						Info::Usability::Broken, // sysInfo.SystemClass == mpt::OS::Class::Windows ? Info::Usability::Deprecated : Info::Usability::NotAvailable,
 						Info::Level::Secondary,
 						Info::Compatible::No,
-						sysInfo.SystemClass == mpt::OS::Class::Windows ? sysInfo.IsWindowsWine() ? Info::Api::Emulated : sysInfo.WindowsVersion.IsAtLeast(mpt::Windows::Version::WinVista) ? Info::Api::Emulated : Info::Api::Native : Info::Api::Emulated,
+						Info::Api::Emulated,
 						Info::Io::FullDuplex,
 						Info::Mixing::Software,
 						Info::Implementor::External
Index: sounddev/SoundDeviceUtilities.cpp
===================================================================
--- sounddev/SoundDeviceUtilities.cpp	(revision 11890)
+++ sounddev/SoundDeviceUtilities.cpp	(working copy)
@@ -19,6 +19,7 @@
 #include <algorithm>
 
 #if MPT_OS_WINDOWS
+#include <avrt.h>
 #include <mmsystem.h>
 #endif // MPT_OS_WINDOWS
 
@@ -131,41 +132,8 @@
 }
 
 
-MPT_REGISTERED_COMPONENT(ComponentAvRt, "AvRt")
-
-ComponentAvRt::ComponentAvRt()
-	: ComponentLibrary(ComponentTypeSystem)
-	, AvSetMmThreadCharacteristics(nullptr)
-	, AvRevertMmThreadCharacteristics(nullptr)
-{
-	return;
-}
-
-bool ComponentAvRt::DoInitialize()
-{
-	if(!mpt::Windows::Version::Current().IsAtLeast(mpt::Windows::Version::WinVista))
-	{
-		return false;
-	}
-	AddLibrary("avrt", mpt::LibraryPath::System(P_("avrt")));
-	MPT_COMPONENT_BINDWIN("avrt", AvSetMmThreadCharacteristics);
-	MPT_COMPONENT_BIND("avrt", AvRevertMmThreadCharacteristics);
-	if(HasBindFailed())
-	{
-		return false;
-	}
-	return true;
-}
-
-ComponentAvRt::~ComponentAvRt()
-{
-	return;
-}
-
-
-CPriorityBooster::CPriorityBooster(SoundDevice::SysInfo sysInfo, ComponentHandle<ComponentAvRt> & avrt, bool boostPriority, const mpt::winstring & priorityClass, int priority)
+CPriorityBooster::CPriorityBooster(SoundDevice::SysInfo sysInfo, bool boostPriority, const mpt::winstring & priorityClass, int priority)
 	: m_SysInfo(sysInfo)
-	, m_AvRt(avrt)
 	, m_BoostPriority(boostPriority)
 	, m_Priority(priority)
 	, task_idx(0)
@@ -178,16 +146,9 @@
 	#endif
 	if(m_BoostPriority)
 	{
-		if(m_SysInfo.WindowsVersion.IsAtLeast(mpt::Windows::Version::WinVista) && IsComponentAvailable(m_AvRt))
+		if(!priorityClass.empty())
 		{
-			if(!priorityClass.empty())
-			{
-				hTask = m_AvRt->AvSetMmThreadCharacteristics(priorityClass.c_str(), &task_idx);
-			}
-		} else
-		{
-			oldPriority = GetThreadPriority(GetCurrentThread());
-			SetThreadPriority(GetCurrentThread(), m_Priority);
+			hTask = AvSetMmThreadCharacteristics(priorityClass.c_str(), &task_idx);
 		}
 	}
 }
@@ -198,18 +159,12 @@
 	MPT_TRACE_SCOPE();
 	if(m_BoostPriority)
 	{
-		if(m_SysInfo.WindowsVersion.IsAtLeast(mpt::Windows::Version::WinVista) && IsComponentAvailable(m_AvRt))
+		if(hTask)
 		{
-			if(hTask)
-			{
-				m_AvRt->AvRevertMmThreadCharacteristics(hTask);
-			}
-			hTask = NULL;
-			task_idx = 0;
-		} else
-		{
-			SetThreadPriority(GetCurrentThread(), oldPriority);
+			AvRevertMmThreadCharacteristics(hTask);
 		}
+		hTask = NULL;
+		task_idx = 0;
 	}
 }
 
@@ -322,7 +277,7 @@
 		if(!terminate)
 		{
 
-			CPriorityBooster priorityBooster(m_SoundDevice.GetSysInfo(), m_AvRt, m_SoundDevice.m_Settings.BoostThreadPriority, m_MMCSSClass, m_SoundDevice.m_AppInfo.BoostedThreadPriorityXP);
+			CPriorityBooster priorityBooster(m_SoundDevice.GetSysInfo(), m_SoundDevice.m_Settings.BoostThreadPriority, m_MMCSSClass, m_SoundDevice.m_AppInfo.BoostedThreadPriorityXP);
 			CPeriodicWaker periodicWaker(m_WakeupInterval);
 
 			m_SoundDevice.StartFromSoundThread();
Index: sounddev/SoundDeviceUtilities.h
===================================================================
--- sounddev/SoundDeviceUtilities.h	(revision 11890)
+++ sounddev/SoundDeviceUtilities.h	(working copy)
@@ -16,7 +16,6 @@
 #include "SoundDeviceBase.h"
 
 #include "../common/misc_util.h"
-#include "../common/ComponentManager.h"
 
 #if MPT_OS_WINDOWS
 #include <mmreg.h>
@@ -48,27 +47,10 @@
 class CSoundDeviceWithThread;
 
 
-class ComponentAvRt
-	: public ComponentLibrary
-{
-	MPT_DECLARE_COMPONENT_MEMBERS
-public:
-	typedef HANDLE (WINAPI *pAvSetMmThreadCharacteristics)(LPCTSTR, LPDWORD);
-	typedef BOOL (WINAPI *pAvRevertMmThreadCharacteristics)(HANDLE);
-	pAvSetMmThreadCharacteristics AvSetMmThreadCharacteristics;
-	pAvRevertMmThreadCharacteristics AvRevertMmThreadCharacteristics;
-public:
-	ComponentAvRt();
-	virtual ~ComponentAvRt();
-	bool DoInitialize() override;
-};
-
-
 class CPriorityBooster
 {
 private:
 	SoundDevice::SysInfo m_SysInfo;
-	ComponentHandle<ComponentAvRt> & m_AvRt;
 	bool m_BoostPriority;
 	int m_Priority;
 	DWORD task_idx;
@@ -75,7 +57,7 @@
 	HANDLE hTask;
 	int oldPriority;
 public:
-	CPriorityBooster(SoundDevice::SysInfo sysInfo, ComponentHandle<ComponentAvRt> & avrt, bool boostPriority, const mpt::winstring & priorityClass, int priority);
+	CPriorityBooster(SoundDevice::SysInfo sysInfo, bool boostPriority, const mpt::winstring & priorityClass, int priority);
 	~CPriorityBooster();
 };
 
@@ -85,7 +67,6 @@
 	friend class CPeriodicWaker;
 private:
 	CSoundDeviceWithThread & m_SoundDevice;
-	ComponentHandle<ComponentAvRt> m_AvRt;
 	mpt::winstring m_MMCSSClass;
 	double m_WakeupInterval;
 	HANDLE m_hAudioWakeUp;
Index: sounddev/SoundDeviceWaveout.cpp
===================================================================
--- sounddev/SoundDeviceWaveout.cpp	(revision 11890)
+++ sounddev/SoundDeviceWaveout.cpp	(working copy)
@@ -93,11 +93,8 @@
 	caps.CanDriverPanel = false;
 	caps.HasInternalDither = false;
 	caps.ExclusiveModeDescription = U_("Use direct mode");
-	if(GetSysInfo().IsWine)
+	if(GetSysInfo().IsOriginal())
 	{
-		caps.DefaultSettings.sampleFormat = SampleFormatInt16;
-	} else if(GetSysInfo().WindowsVersion.IsAtLeast(mpt::Windows::Version::WinVista))
-	{
 		caps.DefaultSettings.sampleFormat = SampleFormatFloat32;
 	} else
 	{
@@ -111,7 +108,7 @@
 {
 	MPT_TRACE_SCOPE();
 	SoundDevice::DynamicCaps caps;
-	if(GetSysInfo().IsOriginal() && GetSysInfo().WindowsVersion.IsAtLeast(mpt::Windows::Version::WinVista))
+	if(GetSysInfo().IsOriginal())
 	{
 		caps.supportedSampleFormats = { SampleFormatFloat32 };
 		caps.supportedExclusiveModeSampleFormats = { SampleFormatFloat32 };
@@ -236,7 +233,7 @@
 	}
 	SetWakeupEvent(m_ThreadWakeupEvent);
 	SetWakeupInterval(m_nWaveBufferSize * 1.0 / m_Settings.GetBytesPerSecond());
-	m_Flags.NeedsClippedFloat = (GetSysInfo().IsOriginal() && GetSysInfo().WindowsVersion.IsAtLeast(mpt::Windows::Version::WinVista));
+	m_Flags.NeedsClippedFloat = GetSysInfo().IsOriginal();
 	return true;
 }
 
@@ -374,11 +371,7 @@
 	ULONG nBytesWritten = 0;
 	while((oldBuffersPending < m_nPreparedHeaders) && !m_Failed)
 	{
-#if (_WIN32_WINNT >= 0x0600)
 		DWORD oldFlags = InterlockedOr(interlocked_access(&m_WaveBuffers[m_nWriteBuffer].dwFlags), 0);
-#else
-		DWORD oldFlags = _InterlockedOr(interlocked_access(&m_WaveBuffers[m_nWriteBuffer].dwFlags), 0);
-#endif
 		uint32 driverBugs = 0;
 		if(oldFlags & WHDR_INQUEUE)
 		{
@@ -413,11 +406,7 @@
 		SourceLockedAudioReadPrepare(m_nWaveBufferSize / bytesPerFrame, nLatency / bytesPerFrame);
 		SourceLockedAudioRead(m_WaveBuffers[m_nWriteBuffer].lpData, nullptr, m_nWaveBufferSize / bytesPerFrame);
 		nBytesWritten += m_nWaveBufferSize;
-#if (_WIN32_WINNT >= 0x0600)
 		InterlockedAnd(interlocked_access(&m_WaveBuffers[m_nWriteBuffer].dwFlags), ~static_cast<DWORD>(WHDR_INQUEUE|WHDR_DONE));
-#else
-		_InterlockedAnd(interlocked_access(&m_WaveBuffers[m_nWriteBuffer].dwFlags), ~static_cast<DWORD>(WHDR_INQUEUE|WHDR_DONE));
-#endif
 		InterlockedExchange(interlocked_access(&m_WaveBuffers[m_nWriteBuffer].dwBufferLength), m_nWaveBufferSize);
 		InterlockedIncrement(&m_nBuffersPending);
 		oldBuffersPending++; // increment separately to avoid looping without leaving at all when rendering takes more than 100% CPU
@@ -524,11 +513,7 @@
 void CWaveDevice::HandleWaveoutDone(WAVEHDR *hdr)
 {
 	MPT_TRACE_SCOPE();
-#if (_WIN32_WINNT >= 0x0600)
 	DWORD flags = InterlockedOr(interlocked_access(&hdr->dwFlags), 0);
-#else
-	DWORD flags = _InterlockedOr(interlocked_access(&hdr->dwFlags), 0);
-#endif
 	std::size_t hdrIndex = hdr - &(m_WaveBuffers[0]);
 	uint32 driverBugs = 0;
 	if(hdrIndex != m_nDoneBuffer)
@@ -621,10 +606,10 @@
 		}
 		info.isDefault = (index == 0);
 		info.flags = {
-			sysInfo.SystemClass == mpt::OS::Class::Windows ? sysInfo.IsWindowsOriginal() && sysInfo.WindowsVersion.IsBefore(mpt::Windows::Version::Win7) ? Info::Usability::Usable : Info::Usability::Deprecated : Info::Usability::NotAvailable,
+			sysInfo.SystemClass == mpt::OS::Class::Windows ? Info::Usability::Deprecated : Info::Usability::NotAvailable,
 			Info::Level::Primary,
 			sysInfo.SystemClass == mpt::OS::Class::Windows && sysInfo.IsWindowsOriginal() ? Info::Compatible::Yes : Info::Compatible::No,
-			sysInfo.SystemClass == mpt::OS::Class::Windows ? sysInfo.IsWindowsWine() ? Info::Api::Emulated : sysInfo.WindowsVersion.IsAtLeast(mpt::Windows::Version::WinVista) ? Info::Api::Emulated : Info::Api::Native : Info::Api::Emulated,
+			Info::Api::Emulated,
 			Info::Io::OutputOnly,
 			Info::Mixing::Software,
 			Info::Implementor::OpenMPT
