diff --git a/src/plugins/cvs/cvsplugin.cpp b/src/plugins/cvs/cvsplugin.cpp
index f1b21a4de6d1fd5dfaab71f086b1c4f1ea329f12..1f7e646fe1d91c8568898817b50dc6e3826fcbe4 100644
--- a/src/plugins/cvs/cvsplugin.cpp
+++ b/src/plugins/cvs/cvsplugin.cpp
@@ -980,7 +980,8 @@ static inline QString msgExecutionLogEntry(const QString &workingDir, const QStr
     const QString args = arguments.join(QString(QLatin1Char(' ')));
     if (workingDir.isEmpty())
         return CVSPlugin::tr("Executing: %1 %2\n").arg(executable, args);
-    return CVSPlugin::tr("Executing in %1: %2 %3\n").arg(workingDir, executable, args);
+    return CVSPlugin::tr("Executing in %1: %2 %3\n").
+            arg(QDir::toNativeSeparators(workingDir), executable, args);
 }
 
 // Run CVS. At this point, file arguments must be relative to
diff --git a/src/plugins/perforce/perforcechecker.cpp b/src/plugins/perforce/perforcechecker.cpp
index 315c7311b49d9faa07d0d738d98383f3be12bfc3..ea48d9db00fa875214ff5343163e556fea98c07e 100644
--- a/src/plugins/perforce/perforcechecker.cpp
+++ b/src/plugins/perforce/perforcechecker.cpp
@@ -155,8 +155,9 @@ static inline QString clientRootFromOutput(const QString &in)
     QRegExp regExp(QLatin1String("(\\n|\\r\\n|\\r)Root:\\s*(.*)(\\n|\\r\\n|\\r)"));
     QTC_ASSERT(regExp.isValid(), return QString());
     regExp.setMinimal(true);
+    // Normalize slashes and capitalization of Windows drive letters for caching.
     if (regExp.indexIn(in) != -1)
-        return regExp.cap(2).trimmed();
+        return QFileInfo(regExp.cap(2).trimmed()).absoluteFilePath();
     return QString();
 }
 
diff --git a/src/plugins/subversion/subversionplugin.cpp b/src/plugins/subversion/subversionplugin.cpp
index 36e60dcc93704ecc42ab08540563041270e1069d..a29483bd189843fe0701898aaaa19a6f148ea870 100644
--- a/src/plugins/subversion/subversionplugin.cpp
+++ b/src/plugins/subversion/subversionplugin.cpp
@@ -1030,7 +1030,8 @@ static inline QString msgExecutionLogEntry(const QString &workingDir, const QStr
     const QString argsS = SubversionSettings::formatArguments(arguments);
     if (workingDir.isEmpty())
         return SubversionPlugin::tr("Executing: %1 %2\n").arg(executable, argsS);
-    return SubversionPlugin::tr("Executing in %1: %2 %3\n").arg(workingDir, executable, argsS);
+    return SubversionPlugin::tr("Executing in %1: %2 %3\n").
+            arg(QDir::toNativeSeparators(workingDir), executable, argsS);
 }
 
 SubversionResponse SubversionPlugin::runSvn(const QString &workingDir,
@@ -1252,7 +1253,7 @@ QString SubversionPlugin::findTopLevelForDirectoryI(const QString &directory) co
         return QString();
     for (QDir parentDir = lastDirectory; parentDir.cdUp() ; lastDirectory = parentDir) {
         if (!managesDirectory(parentDir))
-            return QDir::toNativeSeparators(lastDirectory.absolutePath());
+            return lastDirectory.absolutePath();
     }
     return QString();
 }