Index: mptrack/UpdateCheck.cpp
===================================================================
--- mptrack/UpdateCheck.cpp	(revision 19257)
+++ mptrack/UpdateCheck.cpp	(working copy)
@@ -742,9 +742,18 @@
 }
 
 
-void CUpdateCheck::CleanOldUpdates(const CUpdateCheck::Settings & /* settings */ , const CUpdateCheck::Context & /* context */ )
+mpt::PathString CUpdateCheck::GetUpdateTempDirectory(bool portable)
 {
-	mpt::PathString dirTemp = mpt::common_directories::get_temp_directory();
+	if(portable)
+	{
+		return theApp.GetInstallPath().WithTrailingSlash() + P_("Temp") + mpt::PathString::FromNative(mpt::RawPathString(1, mpt::PathString::GetDefaultPathSeparator()));
+	}
+	return mpt::common_directories::get_temp_directory();
+}
+
+
+void CUpdateCheck::CleanOldUpdates(mpt::PathString dirTemp)
+{
 	if(dirTemp.empty())
 	{
 		return;
@@ -763,6 +772,16 @@
 }
 
 
+void CUpdateCheck::CleanOldUpdates(const CUpdateCheck::Settings & /* settings */ , const CUpdateCheck::Context & /* context */ )
+{
+	if(theApp.IsPortableMode())
+	{
+		CleanOldUpdates(GetUpdateTempDirectory(true));
+	}
+	CleanOldUpdates(GetUpdateTempDirectory(false));
+}
+
+
 void CUpdateCheck::SendStatistics(HTTP::InternetSession &internet, const CUpdateCheck::Settings &settings, const std::string &statistics)
 {
 	if(settings.sendStatistics)
@@ -1118,12 +1137,13 @@
 				}
 
 				UpdateProgress(_T("Preparing download..."), 6.0);
-				mpt::PathString dirTemp = mpt::common_directories::get_temp_directory();
+				mpt::PathString dirTemp = CUpdateCheck::GetUpdateTempDirectory(theApp.IsPortableMode());
+				::CreateDirectory(mpt::support_long_path(dirTemp.AsNative()).c_str(), NULL);
 				mpt::PathString dirTempOpenMPT = dirTemp + P_("OpenMPT") + mpt::PathString::FromNative(mpt::RawPathString(1, mpt::PathString::GetDefaultPathSeparator()));
+				::CreateDirectory(mpt::support_long_path(dirTempOpenMPT.AsNative()).c_str(), NULL);
 				dirTempOpenMPTUpdates = dirTempOpenMPT + P_("Updates") + mpt::PathString::FromNative(mpt::RawPathString(1, mpt::PathString::GetDefaultPathSeparator()));
+				::CreateDirectory(mpt::support_long_path(dirTempOpenMPTUpdates.AsNative()).c_str(), NULL);
 				updateFilename = dirTempOpenMPTUpdates + mpt::PathString::FromUnicode(downloadinfo.filename);
-				::CreateDirectory(mpt::support_long_path(dirTempOpenMPT.AsNative()).c_str(), NULL);
-				::CreateDirectory(mpt::support_long_path(dirTempOpenMPTUpdates.AsNative()).c_str(), NULL);
 			
 				{
 			
Index: mptrack/UpdateCheck.h
===================================================================
--- mptrack/UpdateCheck.h	(revision 19257)
+++ mptrack/UpdateCheck.h	(working copy)
@@ -130,6 +130,8 @@
 	// v3
 	static std::string GetStatisticsDataV3(const Settings &settings);  // UTF8
 
+	static mpt::PathString GetUpdateTempDirectory(bool portable);
+
 protected:
 
 	static void StartUpdateCheckAsync(bool autoUpdate);
@@ -146,6 +148,8 @@
 
 	static UpdateCheckResult SearchUpdate(const CUpdateCheck::Context &context, const CUpdateCheck::Settings &settings, const std::string &statistics); // may throw
 
+	static void CleanOldUpdates(mpt::PathString dirTemp);
+
 	static void CleanOldUpdates(const CUpdateCheck::Settings &settings, const CUpdateCheck::Context &context);
 
 	static void SendStatistics(HTTP::InternetSession &internet, const CUpdateCheck::Settings &settings, const std::string &statistics); // may throw
