diff --git a/code/ryzom/tools/client/ryzom_installer/src/configfile.cpp b/code/ryzom/tools/client/ryzom_installer/src/configfile.cpp
index fea558af4..10ea322a2 100644
--- a/code/ryzom/tools/client/ryzom_installer/src/configfile.cpp
+++ b/code/ryzom/tools/client/ryzom_installer/src/configfile.cpp
@@ -466,7 +466,7 @@ bool CConfigFile::uninstallingOldClient() const
 	return QFile::exists(getInstallationDirectory() + "/ryzom_installer_uninstalling_old_client");
 }
 
-void CConfigFile::setUninstallingOldClient(bool on)
+void CConfigFile::setUninstallingOldClient(bool on) const
 {
 	QString filename = getInstallationDirectory() + "/ryzom_installer_uninstalling_old_client";
 
@@ -999,9 +999,19 @@ OperationStep CConfigFile::getInstallNextStep() const
 	if (!settings.contains("InstallLocation")) return CreateAddRemoveEntry;
 #endif
 
-	if (!uninstallingOldClient() && m_shouldUninstallOldClient && !getSrcServerDirectory().isEmpty() && QFile::exists(getSrcServerDirectory() + "/Uninstall.exe"))
+	if (m_shouldUninstallOldClient && !getSrcServerDirectory().isEmpty())
 	{
-		return UninstallOldClient;
+		// if old client must be uninstalled
+		if (!uninstallingOldClient() && QFile::exists(getSrcServerDirectory() + "/Uninstall.exe"))
+		{
+			return UninstallOldClient;
+		}
+
+		// if old client has been uninstalled
+		if (uninstallingOldClient() && !QFile::exists(getSrcServerDirectory() + "/Uninstall.exe"))
+		{
+			setUninstallingOldClient(false);
+		}
 	}
 
 	return Done;
diff --git a/code/ryzom/tools/client/ryzom_installer/src/configfile.h b/code/ryzom/tools/client/ryzom_installer/src/configfile.h
index ecad07af3..70ca6a6a0 100644
--- a/code/ryzom/tools/client/ryzom_installer/src/configfile.h
+++ b/code/ryzom/tools/client/ryzom_installer/src/configfile.h
@@ -112,7 +112,7 @@ public:
 	void setShouldUninstallOldClient(bool on);
 
 	bool uninstallingOldClient() const;
-	void setUninstallingOldClient(bool on);
+	void setUninstallingOldClient(bool on) const;
 
 	QString expandVariables(const QString &str) const;