diff --git a/src/plugins/bazaar/bazaarcontrol.cpp b/src/plugins/bazaar/bazaarcontrol.cpp
index 361f2a96cb328f2ae59956538673cb82eea188ac..e832086fbbb325b4545bb7cdb5901f67db8bd497 100644
--- a/src/plugins/bazaar/bazaarcontrol.cpp
+++ b/src/plugins/bazaar/bazaarcontrol.cpp
@@ -67,7 +67,7 @@ bool BazaarControl::managesDirectory(const QString &directory, QString *topLevel
 
 bool BazaarControl::isConfigured() const
 {
-    const QString binary = m_bazaarClient->settings()->stringValue(BazaarSettings::binaryPathKey);
+    const QString binary = m_bazaarClient->settings()->binaryPath();
     if (binary.isEmpty())
         return false;
     QFileInfo fi(binary);
diff --git a/src/plugins/bazaar/clonewizard.cpp b/src/plugins/bazaar/clonewizard.cpp
index 827041a44a82744e5aee386dff2ac9744701fbc2..07aade5404314da69f250e8eb3c56bf017cb0afc 100644
--- a/src/plugins/bazaar/clonewizard.cpp
+++ b/src/plugins/bazaar/clonewizard.cpp
@@ -113,6 +113,6 @@ QSharedPointer<VcsBase::AbstractCheckoutJob> CloneWizard::createJob(const QList<
          << extraOptions << page->repository() << page->directory();
 
     VcsBase::ProcessCheckoutJob *job = new VcsBase::ProcessCheckoutJob;
-    job->addStep(settings.stringValue(BazaarSettings::binaryPathKey), args, page->path());
+    job->addStep(settings.binaryPath(), args, page->path());
     return QSharedPointer<VcsBase::AbstractCheckoutJob>(job);
 }
diff --git a/src/plugins/bazaar/optionspage.cpp b/src/plugins/bazaar/optionspage.cpp
index da108b6cb9eded0ed537dad85723715a493c8802..377d13b3727763bf14c556580c5efc06a829add8 100644
--- a/src/plugins/bazaar/optionspage.cpp
+++ b/src/plugins/bazaar/optionspage.cpp
@@ -53,7 +53,7 @@ OptionsPageWidget::OptionsPageWidget(QWidget *parent)
 BazaarSettings OptionsPageWidget::settings() const
 {
     BazaarSettings s = BazaarPlugin::instance()->settings();
-    s.setValue(BazaarSettings::binaryPathKey, m_ui.commandChooser->path());
+    s.setValue(BazaarSettings::binaryPathKey, m_ui.commandChooser->rawPath());
     s.setValue(BazaarSettings::userNameKey, m_ui.defaultUsernameLineEdit->text().trimmed());
     s.setValue(BazaarSettings::userEmailKey, m_ui.defaultEmailLineEdit->text().trimmed());
     s.setValue(BazaarSettings::logCountKey, m_ui.logEntriesCount->value());
diff --git a/src/plugins/cvs/checkoutwizard.cpp b/src/plugins/cvs/checkoutwizard.cpp
index a28a3172090aed7f0cc19d998cad8984562609da..2339260f7ad4b6c1d496fcfbd8e4970fd9b60c55 100644
--- a/src/plugins/cvs/checkoutwizard.cpp
+++ b/src/plugins/cvs/checkoutwizard.cpp
@@ -84,7 +84,7 @@ QSharedPointer<VcsBase::AbstractCheckoutJob> CheckoutWizard::createJob(const QLi
     const CheckoutWizardPage *cwp = qobject_cast<const CheckoutWizardPage *>(parameterPages.front());
     QTC_ASSERT(cwp, return QSharedPointer<VcsBase::AbstractCheckoutJob>());
     const CvsSettings settings = CvsPlugin::instance()->settings();
-    const QString binary = settings.cvsCommand;
+    const QString binary = settings.cvsBinaryPath;
     QStringList args;
     const QString repository = cwp->repository();
     args << QLatin1String("checkout") << repository;
diff --git a/src/plugins/cvs/cvscontrol.cpp b/src/plugins/cvs/cvscontrol.cpp
index f16344818c2c02fa40f533b794927f50807429ca..45e8f473d8c0c4e8dff6d295f6752db5437c3be7 100644
--- a/src/plugins/cvs/cvscontrol.cpp
+++ b/src/plugins/cvs/cvscontrol.cpp
@@ -56,7 +56,7 @@ Core::Id CvsControl::id() const
 
 bool CvsControl::isConfigured() const
 {
-    const QString binary = m_plugin->settings().cvsCommand;
+    const QString binary = m_plugin->settings().cvsBinaryPath;
     if (binary.isEmpty())
         return false;
     QFileInfo fi(binary);
diff --git a/src/plugins/cvs/cvsplugin.cpp b/src/plugins/cvs/cvsplugin.cpp
index 1f1561b46f3200cf5460a4498de336990d603415..1bf6a4fc6c46e57b3d9d987235826ae67c1a5a87 100644
--- a/src/plugins/cvs/cvsplugin.cpp
+++ b/src/plugins/cvs/cvsplugin.cpp
@@ -1229,7 +1229,7 @@ CvsResponse CvsPlugin::runCvs(const QString &workingDirectory,
                               unsigned flags,
                               QTextCodec *outputCodec)
 {
-    const QString executable = m_settings.cvsCommand;
+    const QString executable = m_settings.cvsBinaryPath;
     CvsResponse response;
     if (executable.isEmpty()) {
         response.result = CvsResponse::OtherError;
diff --git a/src/plugins/cvs/cvssettings.cpp b/src/plugins/cvs/cvssettings.cpp
index 3a843b63c3e2a1447a99949962cb2d3f8eebc239..e22a7bb8985d058fa2dac92e5e6f51412ce5da22 100644
--- a/src/plugins/cvs/cvssettings.cpp
+++ b/src/plugins/cvs/cvssettings.cpp
@@ -30,6 +30,8 @@
 
 #include "cvssettings.h"
 
+#include <utils/environment.h>
+
 #include <QSettings>
 #include <QTextStream>
 
@@ -70,6 +72,7 @@ void CvsSettings::fromSettings(QSettings *settings)
 {
     settings->beginGroup(QLatin1String(groupC));
     cvsCommand = settings->value(QLatin1String(commandKeyC), defaultCommand()).toString();
+    cvsBinaryPath = Utils::Environment::systemEnvironment().searchInPath(cvsCommand);
     promptToSubmit = settings->value(QLatin1String(promptToSubmitKeyC), true).toBool();
     cvsRoot = settings->value(QLatin1String(rootC), QString()).toString();
     cvsDiffOptions = settings->value(QLatin1String(diffOptionsKeyC), QLatin1String(defaultDiffOptions)).toString();
diff --git a/src/plugins/cvs/cvssettings.h b/src/plugins/cvs/cvssettings.h
index eb3eaaa9416f759b6283600b135e7222d1c027dc..09cd04da9a790a6b71b9a94e0a2f77cd6aaaf3c1 100644
--- a/src/plugins/cvs/cvssettings.h
+++ b/src/plugins/cvs/cvssettings.h
@@ -56,6 +56,7 @@ struct CvsSettings
     bool equals(const CvsSettings &s) const;
 
     QString cvsCommand;
+    QString cvsBinaryPath;
     QString cvsRoot;
     QString cvsDiffOptions;
     int timeOutS;
diff --git a/src/plugins/cvs/settingspage.cpp b/src/plugins/cvs/settingspage.cpp
index 622043024ed90872223c59af2544c458246f70aa..51383b2158a210bbb8ca05319cba8b7c042ef47a 100644
--- a/src/plugins/cvs/settingspage.cpp
+++ b/src/plugins/cvs/settingspage.cpp
@@ -55,7 +55,8 @@ SettingsPageWidget::SettingsPageWidget(QWidget *parent) :
 CvsSettings SettingsPageWidget::settings() const
 {
     CvsSettings rc;
-    rc.cvsCommand = m_ui.commandPathChooser->path();
+    rc.cvsCommand = m_ui.commandPathChooser->rawPath();
+    rc.cvsBinaryPath = m_ui.commandPathChooser->path();
     rc.cvsRoot = m_ui.rootLineEdit->text();
     rc.cvsDiffOptions = m_ui.diffOptionsLineEdit->text();
     rc.timeOutS = m_ui.timeOutSpinBox->value();
diff --git a/src/plugins/git/gitsettings.cpp b/src/plugins/git/gitsettings.cpp
index c4fca8d32d49ddb462fb5149ad241c6181d3e31d..53810909683f20683e05f5dd1d3a263a1ff753a1 100644
--- a/src/plugins/git/gitsettings.cpp
+++ b/src/plugins/git/gitsettings.cpp
@@ -82,7 +82,7 @@ QString GitSettings::gitBinaryPath(bool *ok, QString *errorMessage) const
         errorMessage->clear();
 
     if (m_binaryPath.isEmpty()) {
-        const QString binary = stringValue(binaryPathKey);
+        const QString binary = binaryPath();
         QString currentPath = stringValue(pathKey);
         QString systemPath = QString::fromLocal8Bit(qgetenv("PATH"));
         if (!systemPath.isEmpty()) {
diff --git a/src/plugins/mercurial/clonewizard.cpp b/src/plugins/mercurial/clonewizard.cpp
index 1ed218952c194fed6e7650d9ff7758d4b072a6aa..99afd0708e6fc0c5cb767f7747214010d7b8196d 100644
--- a/src/plugins/mercurial/clonewizard.cpp
+++ b/src/plugins/mercurial/clonewizard.cpp
@@ -92,6 +92,6 @@ QSharedPointer<AbstractCheckoutJob> CloneWizard::createJob(const QList<QWizardPa
     args << QLatin1String("clone") << page->repository() << directory;
     *checkoutPath = path + QLatin1Char('/') + directory;
     ProcessCheckoutJob *job = new ProcessCheckoutJob;
-    job->addStep(settings.stringValue(MercurialSettings::binaryPathKey), args, path);
+    job->addStep(settings.binaryPath(), args, path);
     return QSharedPointer<AbstractCheckoutJob>(job);
 }
diff --git a/src/plugins/mercurial/mercurialcontrol.cpp b/src/plugins/mercurial/mercurialcontrol.cpp
index 275a28c690957853c45f8f531ee1a4893ccdaab4..3b9b075bbac05cf33f399f88f2a5d5409862fa30 100644
--- a/src/plugins/mercurial/mercurialcontrol.cpp
+++ b/src/plugins/mercurial/mercurialcontrol.cpp
@@ -67,7 +67,7 @@ bool MercurialControl::managesDirectory(const QString &directory, QString *topLe
 
 bool MercurialControl::isConfigured() const
 {
-    const QString binary = mercurialClient->settings()->stringValue(MercurialSettings::binaryPathKey);
+    const QString binary = mercurialClient->settings()->binaryPath();
     if (binary.isEmpty())
         return false;
     QFileInfo fi(binary);
diff --git a/src/plugins/mercurial/optionspage.cpp b/src/plugins/mercurial/optionspage.cpp
index 1fe57b1af58f5bc76d4b7a18cffc0ab138fe6e69..9c7bc41b632b9926cc3231d31f49d06739b2d749 100644
--- a/src/plugins/mercurial/optionspage.cpp
+++ b/src/plugins/mercurial/optionspage.cpp
@@ -52,7 +52,7 @@ OptionsPageWidget::OptionsPageWidget(QWidget *parent) :
 MercurialSettings OptionsPageWidget::settings() const
 {
     MercurialSettings s = MercurialPlugin::instance()->settings();
-    s.setValue(MercurialSettings::binaryPathKey, m_ui.commandChooser->path());
+    s.setValue(MercurialSettings::binaryPathKey, m_ui.commandChooser->rawPath());
     s.setValue(MercurialSettings::userNameKey, m_ui.defaultUsernameLineEdit->text().trimmed());
     s.setValue(MercurialSettings::userEmailKey, m_ui.defaultEmailLineEdit->text().trimmed());
     s.setValue(MercurialSettings::logCountKey, m_ui.logEntriesCount->value());
diff --git a/src/plugins/perforce/perforceplugin.cpp b/src/plugins/perforce/perforceplugin.cpp
index a53d9ab2c3b53678a46a403e7195c6a28fecc5d9..8b204e6708fc9531aa3e5c8762d851b3cf1ed2c6 100644
--- a/src/plugins/perforce/perforceplugin.cpp
+++ b/src/plugins/perforce/perforceplugin.cpp
@@ -1013,7 +1013,7 @@ PerforceResponse PerforcePlugin::synchronousProcess(const QString &workingDir,
     if (Perforce::Constants::debug)
         qDebug() << "PerforcePlugin::run syncp actual args [" << process.workingDirectory() << ']' << args;
     process.setTimeOutMessageBoxEnabled(true);
-    const Utils::SynchronousProcessResponse sp_resp = process.run(m_settings.p4Command(), args);
+    const Utils::SynchronousProcessResponse sp_resp = process.run(m_settings.p4BinaryPath(), args);
     if (Perforce::Constants::debug)
         qDebug() << sp_resp;
 
@@ -1034,7 +1034,7 @@ PerforceResponse PerforcePlugin::synchronousProcess(const QString &workingDir,
         response.message = msgCrash();
         break;
     case Utils::SynchronousProcessResponse::StartFailed:
-        response.message = msgNotStarted(m_settings.p4Command());
+        response.message = msgNotStarted(m_settings.p4BinaryPath());
         break;
     case Utils::SynchronousProcessResponse::Hang:
         response.message = msgCrash();
@@ -1061,13 +1061,13 @@ PerforceResponse PerforcePlugin::fullySynchronousProcess(const QString &workingD
         qDebug() << "PerforcePlugin::run fully syncp actual args [" << process.workingDirectory() << ']' << args;
 
     PerforceResponse response;
-    process.start(m_settings.p4Command(), args);
+    process.start(m_settings.p4BinaryPath(), args);
     if (stdInput.isEmpty())
         process.closeWriteChannel();
 
     if (!process.waitForStarted(3000)) {
         response.error = true;
-        response.message = msgNotStarted(m_settings.p4Command());
+        response.message = msgNotStarted(m_settings.p4BinaryPath());
         return response;
     }
     if (!stdInput.isEmpty()) {
@@ -1075,7 +1075,7 @@ PerforceResponse PerforcePlugin::fullySynchronousProcess(const QString &workingD
             Utils::SynchronousProcess::stopProcess(process);
             response.error = true;
             response.message = tr("Unable to write input data to process %1: %2").
-                               arg(QDir::toNativeSeparators(m_settings.p4Command()),
+                               arg(QDir::toNativeSeparators(m_settings.p4BinaryPath()),
                                    process.errorString());
             return response;
         }
@@ -1145,7 +1145,7 @@ PerforceResponse PerforcePlugin::runP4Cmd(const QString &workingDir,
     actualArgs.append(args);
 
     if (flags & CommandToWindow)
-        outputWindow->appendCommand(workingDir, m_settings.p4Command(), actualArgs);
+        outputWindow->appendCommand(workingDir, m_settings.p4BinaryPath(), actualArgs);
 
     if (flags & ShowBusyCursor)
         QApplication::setOverrideCursor(QCursor(Qt::WaitCursor));
@@ -1520,14 +1520,14 @@ void PerforcePlugin::slotTopLevelFailed(const QString &errorMessage)
 void PerforcePlugin::getTopLevel()
 {
     // Run a new checker
-    if (m_settings.p4Command().isEmpty())
+    if (m_settings.p4BinaryPath().isEmpty())
         return;
     PerforceChecker *checker = new PerforceChecker(this);
     connect(checker, SIGNAL(failed(QString)), this, SLOT(slotTopLevelFailed(QString)));
     connect(checker, SIGNAL(failed(QString)), checker, SLOT(deleteLater()));
     connect(checker, SIGNAL(succeeded(QString)), this, SLOT(slotTopLevelFound(QString)));
     connect(checker, SIGNAL(succeeded(QString)),checker, SLOT(deleteLater()));
-    checker->start(m_settings.p4Command(), m_settings.commonP4Arguments(QString()), 30000);
+    checker->start(m_settings.p4BinaryPath(), m_settings.commonP4Arguments(QString()), 30000);
 }
 
 }
diff --git a/src/plugins/perforce/perforcesettings.cpp b/src/plugins/perforce/perforcesettings.cpp
index 414daf350e67d638e298513a733cf8d30d2ced9e..2dcd24f9e5c9c371a575a5154175be8f49247685 100644
--- a/src/plugins/perforce/perforcesettings.cpp
+++ b/src/plugins/perforce/perforcesettings.cpp
@@ -57,13 +57,12 @@ enum { defaultTimeOutS = 30, defaultLogCount = 1000 };
 
 static QString defaultCommand()
 {
-    Utils::Environment env = Utils::Environment::systemEnvironment();
     QString rc;
     rc = QLatin1String("p4");
 #if defined(Q_OS_WIN32)
     rc.append(QLatin1String(".exe"));
 #endif
-    return env.searchInPath(rc);
+    return rc;
 }
 
 namespace Perforce {
@@ -115,6 +114,7 @@ void PerforceSettings::fromSettings(QSettings *settings)
 {
     settings->beginGroup(QLatin1String(groupC));
     m_settings.p4Command = settings->value(QLatin1String(commandKeyC), defaultCommand()).toString();
+    m_settings.p4BinaryPath = Utils::Environment::systemEnvironment().searchInPath(m_settings.p4Command);
     m_settings.defaultEnv = settings->value(QLatin1String(defaultKeyC), true).toBool();
     m_settings.p4Port = settings->value(QLatin1String(portKeyC), QString()).toString();
     m_settings.p4Client = settings->value(QLatin1String(clientKeyC), QString()).toString();
@@ -159,6 +159,11 @@ QString PerforceSettings::p4Command() const
     return m_settings.p4Command;
 }
 
+QString PerforceSettings::p4BinaryPath() const
+{
+    return m_settings.p4BinaryPath;
+}
+
 QString PerforceSettings::p4Port() const
 {
     return m_settings.p4Port;
diff --git a/src/plugins/perforce/perforcesettings.h b/src/plugins/perforce/perforcesettings.h
index cd185689582563fbd037c02d5fd6b05c57089217..120b6d17d3327622ed4719f6a307f7f2d6fb4f95 100644
--- a/src/plugins/perforce/perforcesettings.h
+++ b/src/plugins/perforce/perforcesettings.h
@@ -54,6 +54,7 @@ struct Settings {
                         QString *errorMessage);
 
     QString p4Command;
+    QString p4BinaryPath;
     QString p4Port;
     QString p4Client;
     QString p4User;
@@ -92,7 +93,7 @@ public:
 
     inline bool isValid() const
     {
-        return !m_topLevel.isEmpty() && !m_settings.p4Command.isEmpty();
+        return !m_topLevel.isEmpty() && !m_settings.p4BinaryPath.isEmpty();
     }
 
     void fromSettings(QSettings *settings);
@@ -123,6 +124,7 @@ public:
     QString mapToFileSystem(const QString &perforceFilePath) const;
 
     QString p4Command() const;
+    QString p4BinaryPath() const;
     QString p4Port() const;
     QString p4Client() const;
     QString p4User() const;
diff --git a/src/plugins/perforce/perforceversioncontrol.cpp b/src/plugins/perforce/perforceversioncontrol.cpp
index 0b0e804fe168d72b41f4dcf37acfdeca3f5efeb7..d4482aa5ba63b5a9084b5edff75b18a8bf750bf0 100644
--- a/src/plugins/perforce/perforceversioncontrol.cpp
+++ b/src/plugins/perforce/perforceversioncontrol.cpp
@@ -58,7 +58,7 @@ Core::Id PerforceVersionControl::id() const
 
 bool PerforceVersionControl::isConfigured() const
 {
-    const QString binary = m_plugin->settings().p4Command();
+    const QString binary = m_plugin->settings().p4BinaryPath();
     if (binary.isEmpty())
         return false;
     QFileInfo fi(binary);
diff --git a/src/plugins/perforce/settingspage.cpp b/src/plugins/perforce/settingspage.cpp
index 4695b035033c6100fa333d41ed1458ee8ebea002..0a0239443ac71032b876f6fb65cf99d2cb893c43 100644
--- a/src/plugins/perforce/settingspage.cpp
+++ b/src/plugins/perforce/settingspage.cpp
@@ -67,7 +67,7 @@ void SettingsPageWidget::slotTest()
 
     setStatusText(tr("Testing..."));
     const Settings s = settings();
-    m_checker->start(s.p4Command, s.commonP4Arguments(), 10000);
+    m_checker->start(s.p4BinaryPath, s.commonP4Arguments(), 10000);
 }
 
 void SettingsPageWidget::testSucceeded(const QString &repo)
@@ -78,7 +78,8 @@ void SettingsPageWidget::testSucceeded(const QString &repo)
 Settings SettingsPageWidget::settings() const
 {
     Settings  settings;
-    settings.p4Command = m_ui.pathChooser->path();
+    settings.p4Command = m_ui.pathChooser->rawPath();
+    settings.p4BinaryPath = m_ui.pathChooser->path();
     settings.defaultEnv = !m_ui.environmentGroupBox->isChecked();
     settings.p4Port = m_ui.portLineEdit->text();
     settings.p4User = m_ui.userLineEdit->text();
diff --git a/src/plugins/subversion/checkoutwizard.cpp b/src/plugins/subversion/checkoutwizard.cpp
index b2f86267d9b40c53e9e848910e6ce695e61418f8..c7ee8c5d26c762f962b1198a2e2d5cd8293c898c 100644
--- a/src/plugins/subversion/checkoutwizard.cpp
+++ b/src/plugins/subversion/checkoutwizard.cpp
@@ -83,7 +83,7 @@ QSharedPointer<VcsBase::AbstractCheckoutJob> CheckoutWizard::createJob(const QLi
     const CheckoutWizardPage *cwp = qobject_cast<const CheckoutWizardPage *>(parameterPages.front());
     QTC_ASSERT(cwp, return QSharedPointer<VcsBase::AbstractCheckoutJob>());
     const SubversionSettings settings = SubversionPlugin::instance()->settings();
-    const QString binary = settings.svnCommand;
+    const QString binary = settings.svnBinaryPath;
     const QString directory = cwp->directory();
     QStringList args;
     args << QLatin1String("checkout") << cwp->repository() << directory;
diff --git a/src/plugins/subversion/settingspage.cpp b/src/plugins/subversion/settingspage.cpp
index 1b14ec46621c5804b8bcd40f757f5af4d9ac8ce0..f8404453c651027fe309d833ccfe2eb6c507a24f 100644
--- a/src/plugins/subversion/settingspage.cpp
+++ b/src/plugins/subversion/settingspage.cpp
@@ -55,7 +55,8 @@ SettingsPageWidget::SettingsPageWidget(QWidget *parent) :
 SubversionSettings SettingsPageWidget::settings() const
 {
     SubversionSettings rc;
-    rc.svnCommand = m_ui.pathChooser->path();
+    rc.svnCommand = m_ui.pathChooser->rawPath();
+    rc.svnBinaryPath = m_ui.pathChooser->path();
     rc.useAuthentication = m_ui.userGroupBox->isChecked();
     rc.user =  m_ui.usernameLineEdit->text();
     rc.password = m_ui.passwordLineEdit->text();
diff --git a/src/plugins/subversion/subversioncontrol.cpp b/src/plugins/subversion/subversioncontrol.cpp
index be625fbc9d78d0e8682e7b58985e80139e6f0c8f..b581244b6cdc1f4f542051c19d5d94e84e8ed1b4 100644
--- a/src/plugins/subversion/subversioncontrol.cpp
+++ b/src/plugins/subversion/subversioncontrol.cpp
@@ -56,7 +56,7 @@ Core::Id SubversionControl::id() const
 
 bool SubversionControl::isConfigured() const
 {
-    const QString binary = m_plugin->settings().svnCommand;
+    const QString binary = m_plugin->settings().svnBinaryPath;
     if (binary.isEmpty())
         return false;
     QFileInfo fi(binary);
diff --git a/src/plugins/subversion/subversionplugin.cpp b/src/plugins/subversion/subversionplugin.cpp
index 97d6882d2a9a858ec04c0c78fd7eb52ee0ae4c7a..c24490515909fa70785b2dcd56300d59d8b794c6 100644
--- a/src/plugins/subversion/subversionplugin.cpp
+++ b/src/plugins/subversion/subversionplugin.cpp
@@ -1120,7 +1120,7 @@ SubversionResponse SubversionPlugin::runSvn(const QString &workingDir,
                           const QStringList &arguments, int timeOut,
                           unsigned flags, QTextCodec *outputCodec)
 {
-    const QString executable = m_settings.svnCommand;
+    const QString executable = m_settings.svnBinaryPath;
     SubversionResponse response;
     if (executable.isEmpty()) {
         response.error = true;
diff --git a/src/plugins/subversion/subversionsettings.cpp b/src/plugins/subversion/subversionsettings.cpp
index d0ef51366b7219f87051e2d07fe3bde327a076b9..8ba54a5a053ff1c3242c8af0e9f07680b33622e4 100644
--- a/src/plugins/subversion/subversionsettings.cpp
+++ b/src/plugins/subversion/subversionsettings.cpp
@@ -30,6 +30,8 @@
 
 #include "subversionsettings.h"
 
+#include <utils/environment.h>
+
 #include <QSettings>
 
 static const char groupC[] = "Subversion";
@@ -71,6 +73,7 @@ void SubversionSettings::fromSettings(QSettings *settings)
 {
     settings->beginGroup(QLatin1String(groupC));
     svnCommand = settings->value(QLatin1String(commandKeyC), defaultCommand()).toString();
+    svnBinaryPath = Utils::Environment::systemEnvironment().searchInPath(svnCommand);
     useAuthentication = settings->value(QLatin1String(authenticationKeyC), QVariant(false)).toBool();
     user = settings->value(QLatin1String(userKeyC), QString()).toString();
     password =  settings->value(QLatin1String(passwordKeyC), QString()).toString();
diff --git a/src/plugins/subversion/subversionsettings.h b/src/plugins/subversion/subversionsettings.h
index d52a48d630a713270aecd8c1b9a6479f9f209b1d..735f21d7bc7a418ff5ccf5b4528b507e2a2fe5f5 100644
--- a/src/plugins/subversion/subversionsettings.h
+++ b/src/plugins/subversion/subversionsettings.h
@@ -55,6 +55,7 @@ struct SubversionSettings
     bool equals(const SubversionSettings &s) const;
 
     QString svnCommand;
+    QString svnBinaryPath;
     bool useAuthentication;
     QString user;
     QString password;
diff --git a/src/plugins/vcsbase/vcsbaseclient.cpp b/src/plugins/vcsbase/vcsbaseclient.cpp
index 0b0737beeb481bf5f094745451a72bfeddeea882..e7afa89b7eef7fef7a8342178c764941e5952f6d 100644
--- a/src/plugins/vcsbase/vcsbaseclient.cpp
+++ b/src/plugins/vcsbase/vcsbaseclient.cpp
@@ -282,7 +282,7 @@ bool VcsBaseClient::vcsFullySynchronousExec(const QString &workingDir,
         vcsProcess.setWorkingDirectory(workingDir);
     vcsProcess.setProcessEnvironment(processEnvironment());
 
-    const QString binary = settings()->stringValue(VcsBaseClientSettings::binaryPathKey);
+    const QString binary = settings()->binaryPath();
 
     ::vcsOutputWindow()->appendCommand(workingDir, binary, args);
 
@@ -317,7 +317,7 @@ Utils::SynchronousProcessResponse VcsBaseClient::vcsSynchronousExec(
         unsigned flags,
         QTextCodec *outputCodec)
 {
-    const QString binary = settings()->stringValue(VcsBaseClientSettings::binaryPathKey);
+    const QString binary = settings()->binaryPath();
     const int timeoutSec = settings()->intValue(VcsBaseClientSettings::timeoutKey);
     return VcsBase::VcsBasePlugin::runVcs(workingDirectory, binary, args,
                                           timeoutSec * 1000, flags, outputCodec);
@@ -545,7 +545,7 @@ VcsBaseEditorParameterWidget *VcsBaseClient::createLogEditor(const QString &work
 
 QString VcsBaseClient::vcsEditorTitle(const QString &vcsCmd, const QString &sourceId) const
 {
-    const QString binary = settings()->stringValue(VcsBaseClientSettings::binaryPathKey);
+    const QString binary = settings()->binaryPath();
     return QFileInfo(binary).baseName() +
             QLatin1Char(' ') + vcsCmd + QLatin1Char(' ') +
             QFileInfo(sourceId).fileName();
@@ -592,7 +592,7 @@ Command *VcsBaseClient::createCommand(const QString &workingDirectory,
                                       VcsBase::VcsBaseEditorWidget *editor,
                                       JobOutputBindMode mode)
 {
-    Command *cmd = new Command(d->m_clientSettings->stringValue(VcsBaseClientSettings::binaryPathKey),
+    Command *cmd = new Command(d->m_clientSettings->binaryPath(),
                                workingDirectory, processEnvironment());
     cmd->setDefaultTimeout(d->m_clientSettings->intValue(VcsBaseClientSettings::timeoutKey));
     if (editor)
@@ -620,7 +620,7 @@ Command *VcsBaseClient::createCommand(const QString &workingDirectory,
 
 void VcsBaseClient::enqueueJob(Command *cmd, const QStringList &args)
 {
-    const QString binary = QFileInfo(d->m_clientSettings->stringValue(VcsBaseClientSettings::binaryPathKey)).baseName();
+    const QString binary = QFileInfo(d->m_clientSettings->binaryPath()).baseName();
     ::vcsOutputWindow()->appendCommand(cmd->workingDirectory(), binary, args);
     cmd->addJob(args);
     cmd->execute();
diff --git a/src/plugins/vcsbase/vcsbaseclientsettings.cpp b/src/plugins/vcsbase/vcsbaseclientsettings.cpp
index c5a3bdbd59e9364a01c9a7b829701ca81b66144a..e71b242e2af21abdd9e97e9e2e5db10864cc75dd 100644
--- a/src/plugins/vcsbase/vcsbaseclientsettings.cpp
+++ b/src/plugins/vcsbase/vcsbaseclientsettings.cpp
@@ -30,6 +30,8 @@
 
 #include "vcsbaseclientsettings.h"
 
+#include <utils/environment.h>
+
 #include <QSettings>
 
 namespace {
@@ -165,13 +167,15 @@ public:
         QSharedData(other),
         m_valueHash(other.m_valueHash),
         m_defaultValueHash(other.m_defaultValueHash),
-        m_settingsGroup(other.m_settingsGroup)
+        m_settingsGroup(other.m_settingsGroup),
+        m_binaryFullPath(other.m_binaryFullPath)
     {
     }
 
     QHash<QString, SettingValue> m_valueHash;
     QVariantHash m_defaultValueHash;
     QString m_settingsGroup;
+    QString m_binaryFullPath;
 };
 
 } // namespace Internal
@@ -326,8 +330,11 @@ QVariant VcsBaseClientSettings::value(const QString &key) const
 
 void VcsBaseClientSettings::setValue(const QString &key, const QVariant &v)
 {
-    if (SettingValue::isUsableVariantType(valueType(key)))
+    if (SettingValue::isUsableVariantType(valueType(key))) {
         d->m_valueHash.insert(key, SettingValue(v));
+        if (key == binaryPathKey)
+            d->m_binaryFullPath = Utils::Environment::systemEnvironment().searchInPath(v.toString());
+    }
 }
 
 QVariant::Type VcsBaseClientSettings::valueType(const QString &key) const
@@ -337,6 +344,11 @@ QVariant::Type VcsBaseClientSettings::valueType(const QString &key) const
     return QVariant::Invalid;
 }
 
+QString VcsBaseClientSettings::binaryPath() const
+{
+    return d->m_binaryFullPath;
+}
+
 QString VcsBaseClientSettings::settingsGroup() const
 {
     return d->m_settingsGroup;
diff --git a/src/plugins/vcsbase/vcsbaseclientsettings.h b/src/plugins/vcsbase/vcsbaseclientsettings.h
index beab822c516206c7f2552148980e8b4f7777b214..f840a085c21ac3e46e83e66a5958afa03425dd5e 100644
--- a/src/plugins/vcsbase/vcsbaseclientsettings.h
+++ b/src/plugins/vcsbase/vcsbaseclientsettings.h
@@ -81,6 +81,8 @@ public:
     void setValue(const QString &key, const QVariant &v);
     QVariant::Type valueType(const QString &key) const;
 
+    QString binaryPath() const;
+
 protected:
     QString settingsGroup() const;
     void setSettingsGroup(const QString &group);