Index: src/ch/WindowsVersion.cpp
===================================================================
diff -u -N -r50ad2dc9f0b42ba432bb54e4a042582277410773 -r50007f112b77cba170e6c427fee5428bda2d9dc5
--- src/ch/WindowsVersion.cpp	(.../WindowsVersion.cpp)	(revision 50ad2dc9f0b42ba432bb54e4a042582277410773)
+++ src/ch/WindowsVersion.cpp	(.../WindowsVersion.cpp)	(revision 50007f112b77cba170e6c427fee5428bda2d9dc5)
@@ -34,7 +34,7 @@
 	if (!m_wstrServicePack.empty())
 		wstrFullVer += L" " + m_wstrServicePack;
 
-	wstrFullVer += L" (" + m_wstrVersion + wstrShortInstallType + L";" + m_wstrCpuArch + L")";
+	wstrFullVer += L" (" + m_wstrVersion + wstrShortInstallType + L")";
 	return wstrFullVer;
 }
 
@@ -62,6 +62,28 @@
 	return m_wstrCpuArch;
 }
 
+bool WindowsVersion::IsWindowsXP()
+{
+	OSVERSIONINFOEX ovi = { 0 };
+	ovi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);
+
+	if(!GetVersionEx((OSVERSIONINFO*)&ovi))
+		return false;
+
+	if(ovi.dwMajorVersion != 5)
+		return false;
+
+	// 32-bit WinXP
+	if(ovi.dwMinorVersion == 1)
+		return true;
+
+	// 64bit WinXP
+	SYSTEM_INFO si = { 0 };
+	GetNativeSystemInfo(&si);
+
+	return ovi.dwMinorVersion == 2 && ovi.wProductType == VER_NT_WORKSTATION && si.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_AMD64;
+}
+
 void WindowsVersion::UpdateCachedData()
 {
 	if(m_bCacheFilled)
@@ -96,19 +118,19 @@
 	case PROCESSOR_ARCHITECTURE_AMD64:
 	{
 #ifndef _M_AMD64
-		m_wstrCpuArch = L"x64-";
+		m_wstrCpuArch = L"x86_64 WOW64";
 #else
-		m_wstrCpuArch = L"x64";
+		m_wstrCpuArch = L"x86_64";
 #endif
 		break;
 	}
 
 	case PROCESSOR_ARCHITECTURE_INTEL:
 	{
 #ifndef _M_IX86
-		m_wstrCpuArch = L"x86-";
+		m_wstrCpuArch = L"x86_32-";		// should not happen
 #else
-		m_wstrCpuArch = L"x86";
+		m_wstrCpuArch = L"x86_32";
 #endif
 		break;
 	}