diff --git a/src/plugins/bazaar/clonewizard.cpp b/src/plugins/bazaar/clonewizard.cpp
index e7bf7a86705ff9a2161af787f480e5495e803a17..f3d4b48ac79c6047a40785b27a74cfbbdcf3f841 100644
--- a/src/plugins/bazaar/clonewizard.cpp
+++ b/src/plugins/bazaar/clonewizard.cpp
@@ -105,9 +105,8 @@ VcsCommand *CloneWizard::createCommand(Utils::FileName *checkoutDir)
     args << client->vcsCommandString(BazaarClient::CloneCommand)
          << extraOptions << cwp->repository() << cwp->directory();
 
-    auto command = new VcsCommand(settings.binaryPath(), cwp->path(),
-                                  client->processEnvironment());
-    command->addJob(args, -1);
+    auto command = new VcsCommand(cwp->path(), client->processEnvironment());
+    command->addJob(settings.binaryPath(), args, -1);
     return command;
 }
 
diff --git a/src/plugins/cvs/checkoutwizard.cpp b/src/plugins/cvs/checkoutwizard.cpp
index 9d39bf0a9f63414a4b419011ad73682b12454b34..640edbb5d18fdb5519ea0de318726f30d40e4fab 100644
--- a/src/plugins/cvs/checkoutwizard.cpp
+++ b/src/plugins/cvs/checkoutwizard.cpp
@@ -82,9 +82,8 @@ VcsCommand *CheckoutWizard::createCommand(Utils::FileName *checkoutDir)
     const QString workingDirectory = cwp->path();
     *checkoutDir = Utils::FileName::fromString(workingDirectory + QLatin1Char('/') + repository);
 
-    auto command = new VcsCommand(binary, workingDirectory,
-                                  QProcessEnvironment::systemEnvironment());
-    command->addJob(settings.addOptions(args), -1);
+    auto command = new VcsCommand(workingDirectory, QProcessEnvironment::systemEnvironment());
+    command->addJob(binary, settings.addOptions(args), -1);
     return command;
 }
 
diff --git a/src/plugins/git/clonewizardpage.cpp b/src/plugins/git/clonewizardpage.cpp
index aaa89dec3129b891500fd75ec3e302f4255268f0..def24830a61d4b40a01714123a8a159ec98d5242 100644
--- a/src/plugins/git/clonewizardpage.cpp
+++ b/src/plugins/git/clonewizardpage.cpp
@@ -123,10 +123,9 @@ VcsCommand *CloneWizardPage::createCheckoutJob(Utils::FileName *checkoutPath) co
      if (d->recursiveCheckBox->isChecked())
          args << QLatin1String("--recursive");
      args << QLatin1String("--progress") << repository() << checkoutDir;
-     auto command = new VcsCommand(client->vcsBinary(), workingDirectory,
-                                   client->processEnvironment());
+     auto command = new VcsCommand(workingDirectory, client->processEnvironment());
      command->addFlags(VcsBasePlugin::MergeOutputChannels);
-     command->addJob(args, -1);
+     command->addJob(client->vcsBinary(), args, -1);
      return command;
 }
 
diff --git a/src/plugins/git/gitclient.cpp b/src/plugins/git/gitclient.cpp
index 948a233bbb0bf728c2dcf1a8304976cc0575cee2..3d4d1c5ba13e1569da2c2cdc7171b18484e531f4 100644
--- a/src/plugins/git/gitclient.cpp
+++ b/src/plugins/git/gitclient.cpp
@@ -150,7 +150,7 @@ void BaseController::runCommand(const QList<QStringList> &args, QTextCodec *code
         m_command->cancel();
     }
 
-    m_command = new VcsCommand(gitClient()->vcsBinary(), m_directory, gitClient()->processEnvironment());
+    m_command = new VcsCommand(m_directory, gitClient()->processEnvironment());
     m_command->setCodec(codec ? codec : EditorManager::defaultTextCodec());
     connect(m_command, &VcsCommand::output, this, &BaseController::processOutput);
     connect(m_command, &VcsCommand::finished, this, &BaseController::reloadFinished);
@@ -159,7 +159,7 @@ void BaseController::runCommand(const QList<QStringList> &args, QTextCodec *code
     foreach (const QStringList &arg, args) {
         QTC_ASSERT(!arg.isEmpty(), continue);
 
-        m_command->addJob(arg, gitClient()->vcsTimeoutS());
+        m_command->addJob(gitClient()->vcsBinary(), arg, gitClient()->vcsTimeoutS());
     }
 
     m_command->execute();
diff --git a/src/plugins/mercurial/clonewizard.cpp b/src/plugins/mercurial/clonewizard.cpp
index 036e6018a63c209baa37ef487ebc98b310a17236..59ba563bf37d47c4607c16a648aceafa626eb667 100644
--- a/src/plugins/mercurial/clonewizard.cpp
+++ b/src/plugins/mercurial/clonewizard.cpp
@@ -83,9 +83,8 @@ VcsCommand *CloneWizard::createCommand(Utils::FileName *checkoutDir)
     QStringList args;
     args << QLatin1String("clone") << cwp->repository() << directory;
     *checkoutDir = Utils::FileName::fromString(path + QLatin1Char('/') + directory);
-    auto command = new VcsCommand(settings.binaryPath(), path,
-                                  QProcessEnvironment::systemEnvironment());
-    command->addJob(args, -1);
+    auto command = new VcsCommand(path, QProcessEnvironment::systemEnvironment());
+    command->addJob(settings.binaryPath(), args, -1);
     return command;
 }
 
diff --git a/src/plugins/subversion/checkoutwizard.cpp b/src/plugins/subversion/checkoutwizard.cpp
index 4fa5fd0ae22f87d606668897c94d189ec1df8545..b5b9336adeaa34488a1835a7a06d8c66d1c4a852 100644
--- a/src/plugins/subversion/checkoutwizard.cpp
+++ b/src/plugins/subversion/checkoutwizard.cpp
@@ -88,9 +88,8 @@ VcsCommand *CheckoutWizard::createCommand(FileName *checkoutDir)
     const QString workingDirectory = cwp->path();
     *checkoutDir = FileName::fromString(workingDirectory + QLatin1Char('/') + directory);
 
-    auto command = new VcsCommand(binary, workingDirectory,
-                                  QProcessEnvironment::systemEnvironment());
-    command->addJob(args, -1);
+    auto command = new VcsCommand(workingDirectory, QProcessEnvironment::systemEnvironment());
+    command->addJob(binary, args, -1);
     return command;
 }
 
diff --git a/src/plugins/subversion/subversionclient.cpp b/src/plugins/subversion/subversionclient.cpp
index 0bf961407b1af66b137159078561270af674e15a..1369960dac9d28c7dbb83a28c7e9f72869fe4657 100644
--- a/src/plugins/subversion/subversionclient.cpp
+++ b/src/plugins/subversion/subversionclient.cpp
@@ -90,7 +90,7 @@ VcsCommand *SubversionClient::createCommitCmd(const QString &repositoryRoot,
     VcsCommand *cmd = createCommand(repositoryRoot);
     cmd->addFlags(VcsBasePlugin::ShowStdOutInLogWindow);
     QStringList args(vcsCommandString(CommitCommand));
-    cmd->addJob(args << svnExtraOptions << files);
+    cmd->addJob(vcsBinary(), args << svnExtraOptions << files);
     return cmd;
 }
 
@@ -232,7 +232,7 @@ QString DiffController::getDescription() const
 
 void DiffController::postCollectTextualDiffOutput()
 {
-    auto command = new VcsCommand(m_client->vcsBinary(), m_workingDirectory, processEnvironment());
+    auto command = new VcsCommand(m_workingDirectory, processEnvironment());
     command->setCodec(EditorManager::defaultTextCodec());
     connect(command, SIGNAL(output(QString)),
             this, SLOT(slotTextualDiffOutputReceived(QString)));
@@ -251,7 +251,7 @@ void DiffController::postCollectTextualDiffOutput()
         args << m_filesList;
     }
 
-    command->addJob(args, m_client->vcsTimeoutS());
+    command->addJob(m_client->vcsBinary(), args, m_client->vcsTimeoutS());
     command->execute();
 }
 
diff --git a/src/plugins/vcsbase/vcsbaseclient.cpp b/src/plugins/vcsbase/vcsbaseclient.cpp
index 5b262ee4c70a9e9fce32fc16c28127ad5c008a11..8d31beedd6893784c9521c55dbd1a9f77cfb3445 100644
--- a/src/plugins/vcsbase/vcsbaseclient.cpp
+++ b/src/plugins/vcsbase/vcsbaseclient.cpp
@@ -139,7 +139,7 @@ VcsCommand *VcsBaseClientImpl::createCommand(const QString &workingDirectory,
                                              VcsBaseEditorWidget *editor,
                                              JobOutputBindMode mode) const
 {
-    auto cmd = new VcsCommand(vcsBinary(), workingDirectory, processEnvironment());
+    auto cmd = new VcsCommand(workingDirectory, processEnvironment());
     cmd->setDefaultTimeoutS(vcsTimeoutS());
     if (editor)
         d->bindCommandToEditor(cmd, editor);
@@ -157,7 +157,7 @@ VcsCommand *VcsBaseClientImpl::createCommand(const QString &workingDirectory,
 void VcsBaseClientImpl::enqueueJob(VcsCommand *cmd, const QStringList &args,
                                    Utils::ExitCodeInterpreter *interpreter)
 {
-    cmd->addJob(args, vcsTimeoutS(), interpreter);
+    cmd->addJob(vcsBinary(), args, vcsTimeoutS(), interpreter);
     cmd->execute();
 }
 
@@ -209,7 +209,7 @@ bool VcsBaseClientImpl::vcsFullySynchronousExec(const QString &workingDir, const
     QByteArray internalErrorData;
     QScopedPointer<VcsCommand> command(createCommand(workingDir));
     command->addFlags(flags);
-    bool result = command->runFullySynchronous(args, vcsTimeoutS(), outputData,
+    bool result = command->runFullySynchronous(vcsBinary(), args, vcsTimeoutS(), outputData,
                                                errorData ? errorData : &internalErrorData);
     if (!internalErrorData.isEmpty() && !(flags & VcsBasePlugin::SuppressStdErrInLogWindow))
         VcsOutputWindow::appendError(commandOutputFromLocal8Bit(internalErrorData));
diff --git a/src/plugins/vcsbase/vcsbaseplugin.cpp b/src/plugins/vcsbase/vcsbaseplugin.cpp
index 429181a90883e042bfe3283cb7a35956380ad1cf..32c59fb2f92ff9e642732f6825c74a85fbb262d9 100644
--- a/src/plugins/vcsbase/vcsbaseplugin.cpp
+++ b/src/plugins/vcsbase/vcsbaseplugin.cpp
@@ -809,11 +809,10 @@ SynchronousProcessResponse VcsBasePlugin::runVcs(const QString &workingDir,
                                                  QTextCodec *outputCodec,
                                                  const QProcessEnvironment &env)
 {
-    VcsCommand command(binary, workingDir,
-                       env.isEmpty() ? QProcessEnvironment::systemEnvironment() : env);
+    VcsCommand command(workingDir, env.isEmpty() ? QProcessEnvironment::systemEnvironment() : env);
     command.addFlags(flags);
     command.setCodec(outputCodec);
-    return command.runVcs(arguments, timeOutS);
+    return command.runVcs(binary, arguments, timeOutS);
 }
 
 } // namespace VcsBase
diff --git a/src/plugins/vcsbase/vcscommand.cpp b/src/plugins/vcsbase/vcscommand.cpp
index 0f8deea498c3a5d8581194c975c561bd577c5bfe..7aa1e86d3d96d571685f2a47171d5bb1eb656748 100644
--- a/src/plugins/vcsbase/vcscommand.cpp
+++ b/src/plugins/vcsbase/vcscommand.cpp
@@ -79,19 +79,18 @@ class VcsCommandPrivate
 {
 public:
     struct Job {
-        explicit Job(const QStringList &a, int t, Utils::ExitCodeInterpreter *interpreter = 0);
+        explicit Job(const Utils::FileName &b, const QStringList &a, int t,
+                     Utils::ExitCodeInterpreter *interpreter = 0);
 
+        Utils::FileName binary;
         QStringList arguments;
         int timeoutS;
         Utils::ExitCodeInterpreter *exitCodeInterpreter;
     };
 
-    VcsCommandPrivate(const Utils::FileName &binary,
-                      const QString &workingDirectory,
-                      const QProcessEnvironment &environment);
+    VcsCommandPrivate(const QString &workingDirectory, const QProcessEnvironment &environment);
     ~VcsCommandPrivate();
 
-    const Utils::FileName m_binaryPath;
     const QString m_workingDirectory;
     const QProcessEnvironment m_environment;
     QVariant m_cookie;
@@ -112,10 +111,8 @@ public:
     int m_lastExecExitCode;
 };
 
-VcsCommandPrivate::VcsCommandPrivate(const Utils::FileName &binary,
-                                     const QString &workingDirectory,
+VcsCommandPrivate::VcsCommandPrivate(const QString &workingDirectory,
                                      const QProcessEnvironment &environment) :
-    m_binaryPath(binary),
     m_workingDirectory(workingDirectory),
     m_environment(environment),
     m_defaultTimeoutS(10),
@@ -137,7 +134,9 @@ VcsCommandPrivate::~VcsCommandPrivate()
     delete m_progressParser;
 }
 
-VcsCommandPrivate::Job::Job(const QStringList &a, int t, Utils::ExitCodeInterpreter *interpreter) :
+VcsCommandPrivate::Job::Job(const Utils::FileName &b, const QStringList &a,
+                            int t, Utils::ExitCodeInterpreter *interpreter) :
+    binary(b),
     arguments(a),
     timeoutS(t),
     exitCodeInterpreter(interpreter)
@@ -149,10 +148,9 @@ VcsCommandPrivate::Job::Job(const QStringList &a, int t, Utils::ExitCodeInterpre
 
 } // namespace Internal
 
-VcsCommand::VcsCommand(const Utils::FileName &binary,
-                       const QString &workingDirectory,
+VcsCommand::VcsCommand(const QString &workingDirectory,
                        const QProcessEnvironment &environment) :
-    d(new Internal::VcsCommandPrivate(binary, workingDirectory, environment))
+    d(new Internal::VcsCommandPrivate(workingDirectory, environment))
 {
     connect(Core::ICore::instance(), &Core::ICore::coreAboutToClose,
             this, &VcsCommand::coreAboutToClose);
@@ -163,11 +161,6 @@ VcsCommand::~VcsCommand()
     delete d;
 }
 
-const Utils::FileName &VcsCommand::binaryPath() const
-{
-    return d->m_binaryPath;
-}
-
 const QString &VcsCommand::workingDirectory() const
 {
     return d->m_workingDirectory;
@@ -198,15 +191,16 @@ void VcsCommand::addFlags(unsigned f)
     d->m_flags |= f;
 }
 
-void VcsCommand::addJob(const QStringList &arguments, Utils::ExitCodeInterpreter *interpreter)
+void VcsCommand::addJob(const Utils::FileName &binary, const QStringList &arguments,
+                        Utils::ExitCodeInterpreter *interpreter)
 {
-    addJob(arguments, defaultTimeoutS(), interpreter);
+    addJob(binary, arguments, defaultTimeoutS(), interpreter);
 }
 
-void VcsCommand::addJob(const QStringList &arguments, int timeoutS,
+void VcsCommand::addJob(const Utils::FileName &binary, const QStringList &arguments, int timeoutS,
                         Utils::ExitCodeInterpreter *interpreter)
 {
-    d->m_jobs.push_back(Internal::VcsCommandPrivate::Job(arguments, timeoutS, interpreter));
+    d->m_jobs.push_back(Internal::VcsCommandPrivate::Job(binary, arguments, timeoutS, interpreter));
 }
 
 void VcsCommand::execute()
@@ -221,7 +215,7 @@ void VcsCommand::execute()
     QFuture<void> task = QtConcurrent::run(&VcsCommand::run, this);
     d->m_watcher.setFuture(task);
     connect(&d->m_watcher, &QFutureWatcher<void>::canceled, this, &VcsCommand::cancel);
-    QString binary = d->m_binaryPath.toFileInfo().baseName();
+    QString binary = d->m_jobs.at(0).binary.toFileInfo().baseName();
     if (!binary.isEmpty())
         binary = binary.replace(0, 1, binary[0].toUpper()); // Upper the first letter
     const QString taskName = binary + QLatin1Char(' ') + d->m_jobs.front().arguments.at(0);
@@ -254,10 +248,7 @@ int VcsCommand::lastExecutionExitCode() const
 void VcsCommand::run(QFutureInterface<void> &future)
 {
     // Check that the binary path is not empty
-    if (binaryPath().isEmpty()) {
-        emit errorText(tr("Unable to start process, binary is empty"));
-        return;
-    }
+    QTC_ASSERT(!d->m_jobs.isEmpty(), return);
 
     QString stdOut;
     QString stdErr;
@@ -272,7 +263,7 @@ void VcsCommand::run(QFutureInterface<void> &future)
     for (int j = 0; j < count; j++) {
         const Internal::VcsCommandPrivate::Job &job = d->m_jobs.at(j);
         Utils::SynchronousProcessResponse resp
-                = runVcs( job.arguments, job.timeoutS, job.exitCodeInterpreter);
+                = runVcs(job.binary, job.arguments, job.timeoutS, job.exitCodeInterpreter);
         stdOut += resp.stdOut;
         stdErr += resp.stdErr;
         d->m_lastExecExitCode = resp.exitCode;
@@ -330,24 +321,25 @@ signals:
     void appendMessage(const QString &text);
 };
 
-Utils::SynchronousProcessResponse VcsCommand::runVcs(const QStringList &arguments, int timeoutS,
+Utils::SynchronousProcessResponse VcsCommand::runVcs(const Utils::FileName &binary,
+                                                     const QStringList &arguments, int timeoutS,
                                                      Utils::ExitCodeInterpreter *interpreter)
 {
     Utils::SynchronousProcessResponse response;
     OutputProxy outputProxy;
 
-    if (d->m_binaryPath.isEmpty()) {
+    if (binary.isEmpty()) {
         response.result = Utils::SynchronousProcessResponse::StartFailed;
         return response;
     }
 
     if (!(d->m_flags & VcsBasePlugin::SuppressCommandLogging))
-        emit outputProxy.appendCommand(d->m_workingDirectory, d->m_binaryPath, arguments);
+        emit outputProxy.appendCommand(d->m_workingDirectory, binary, arguments);
 
     const bool sshPromptConfigured = !d->m_sshPasswordPrompt.isEmpty();
     if (debugExecution) {
         QDebug nsp = qDebug().nospace();
-        nsp << "Command::runVcs" << d->m_workingDirectory << d->m_binaryPath << arguments
+        nsp << "Command::runVcs" << d->m_workingDirectory << binary << arguments
                 << timeoutS;
         if (d->m_flags & VcsBasePlugin::ShowStdOutInLogWindow)
             nsp << "stdout";
@@ -375,7 +367,7 @@ Utils::SynchronousProcessResponse VcsCommand::runVcs(const QStringList &argument
     //    if (d->m_flags & ExpectRepoChanges)
     //        Core::DocumentManager::expectDirectoryChange(d->m_workingDirectory);
     if (d->m_flags & VcsBasePlugin::FullySynchronously) {
-        response = runSynchronous(arguments, timeoutS, interpreter);
+        response = runSynchronous(binary, arguments, timeoutS, interpreter);
     } else {
         Utils::SynchronousProcess process;
         process.setExitCodeInterpreter(interpreter);
@@ -417,19 +409,16 @@ Utils::SynchronousProcessResponse VcsCommand::runVcs(const QStringList &argument
         process.setTimeOutMessageBoxEnabled(true);
 
         // Run!
-        response = process.run(d->m_binaryPath.toString(), arguments);
+        response = process.run(binary.toString(), arguments);
     }
 
     if (!d->m_aborted) {
         // Success/Fail message in appropriate window?
         if (response.result == Utils::SynchronousProcessResponse::Finished) {
-            if (d->m_flags & VcsBasePlugin::ShowSuccessMessage) {
-                emit outputProxy.appendMessage(response.exitMessage(d->m_binaryPath.toUserOutput(),
-                                                                    timeoutS));
-            }
+            if (d->m_flags & VcsBasePlugin::ShowSuccessMessage)
+                emit outputProxy.appendMessage(response.exitMessage(binary.toUserOutput(), timeoutS));
         } else if (!(d->m_flags & VcsBasePlugin::SuppressFailMessageInLogWindow)) {
-            emit outputProxy.appendError(response.exitMessage(d->m_binaryPath.toUserOutput(),
-                                                              timeoutS));
+            emit outputProxy.appendError(response.exitMessage(binary.toUserOutput(), timeoutS));
         }
     }
     emitRepositoryChanged();
@@ -437,7 +426,8 @@ Utils::SynchronousProcessResponse VcsCommand::runVcs(const QStringList &argument
     return response;
 }
 
-Utils::SynchronousProcessResponse VcsCommand::runSynchronous(const QStringList &arguments,
+Utils::SynchronousProcessResponse VcsCommand::runSynchronous(const Utils::FileName &binary,
+                                                             const QStringList &arguments,
                                                              int timeoutS,
                                                              Utils::ExitCodeInterpreter *interpreter)
 {
@@ -459,7 +449,7 @@ Utils::SynchronousProcessResponse VcsCommand::runSynchronous(const QStringList &
         process->setProcessChannelMode(QProcess::MergedChannels);
 
     // Start
-    process->start(d->m_binaryPath.toString(), arguments, QIODevice::ReadOnly);
+    process->start(binary.toString(), arguments, QIODevice::ReadOnly);
     process->closeWriteChannel();
     if (!process->waitForStarted()) {
         response.result = Utils::SynchronousProcessResponse::StartFailed;
@@ -515,15 +505,14 @@ void VcsCommand::emitRepositoryChanged()
     Core::VcsManager::emitRepositoryChanged(d->m_workingDirectory);
 }
 
-bool VcsCommand::runFullySynchronous(const QStringList &arguments, int timeoutS,
-                                     QByteArray *outputData, QByteArray *errorData)
+bool VcsCommand::runFullySynchronous(const Utils::FileName &binary, const QStringList &arguments,
+                                     int timeoutS, QByteArray *outputData, QByteArray *errorData)
 {
-    if (d->m_binaryPath.isEmpty())
-        return false;
+    QTC_ASSERT(!binary.isEmpty(), return false);
 
     OutputProxy outputProxy;
     if (!(d->m_flags & VcsBasePlugin::SuppressCommandLogging))
-        emit outputProxy.appendCommand(d->m_workingDirectory, d->m_binaryPath, arguments);
+        emit outputProxy.appendCommand(d->m_workingDirectory, binary, arguments);
 
     // TODO tell the document manager about expected repository changes
     // if (d->m_flags & ExpectRepoChanges)
@@ -532,12 +521,12 @@ bool VcsCommand::runFullySynchronous(const QStringList &arguments, int timeoutS,
     process.setWorkingDirectory(d->m_workingDirectory);
     process.setProcessEnvironment(d->m_environment);
 
-    process.start(d->m_binaryPath.toString(), arguments);
+    process.start(binary.toString(), arguments);
     process.closeWriteChannel();
     if (!process.waitForStarted()) {
         if (errorData) {
             const QString msg = QString::fromLatin1("Unable to execute \"%1\": %2:")
-                                .arg(d->m_binaryPath.toUserOutput(), process.errorString());
+                                .arg(binary.toUserOutput(), process.errorString());
             *errorData = msg.toLocal8Bit();
         }
         return false;
diff --git a/src/plugins/vcsbase/vcscommand.h b/src/plugins/vcsbase/vcscommand.h
index 966e679c301d38a80aafc923ec8e350c02565d0a..4c75e2e0289435c656b05952548f4708d8332f4d 100644
--- a/src/plugins/vcsbase/vcscommand.h
+++ b/src/plugins/vcsbase/vcscommand.h
@@ -77,20 +77,18 @@ class VCSBASE_EXPORT VcsCommand : public QObject
     Q_OBJECT
 
 public:
-    VcsCommand(const Utils::FileName &binary,
-               const QString &workingDirectory,
+    VcsCommand(const QString &workingDirectory,
                const QProcessEnvironment &environment);
     ~VcsCommand();
 
-    void addJob(const QStringList &arguments, Utils::ExitCodeInterpreter *interpreter = 0);
-    void addJob(const QStringList &arguments, int timeoutS,
+    void addJob(const Utils::FileName &binary, const QStringList &arguments, Utils::ExitCodeInterpreter *interpreter = 0);
+    void addJob(const Utils::FileName &binary, const QStringList &arguments, int timeoutS,
                 Utils::ExitCodeInterpreter *interpreter = 0);
     void execute();
     void abort();
     bool lastExecutionSuccess() const;
     int lastExecutionExitCode() const;
 
-    const Utils::FileName &binaryPath() const;
     const QString &workingDirectory() const;
     const QProcessEnvironment &processEnvironment() const;
 
@@ -109,15 +107,15 @@ public:
     void setProgressParser(ProgressParser *parser);
     void setProgressiveOutput(bool progressive);
 
-    Utils::SynchronousProcessResponse runVcs(const QStringList &arguments, int timeoutS,
+    Utils::SynchronousProcessResponse runVcs(const Utils::FileName &binary, const QStringList &arguments, int timeoutS,
                                              Utils::ExitCodeInterpreter *interpreter = 0);
     // Make sure to not pass through the event loop at all:
-    bool runFullySynchronous(const QStringList &arguments, int timeoutS,
+    bool runFullySynchronous(const Utils::FileName &binary, const QStringList &arguments, int timeoutS,
                              QByteArray *outputData, QByteArray *errorData);
 
 private:
     void run(QFutureInterface<void> &future);
-    Utils::SynchronousProcessResponse runSynchronous(const QStringList &arguments, int timeoutS,
+    Utils::SynchronousProcessResponse runSynchronous(const Utils::FileName &binary, const QStringList &arguments, int timeoutS,
                                                      Utils::ExitCodeInterpreter *interpreter = 0);
     void emitRepositoryChanged();