diff --git a/src/plugins/cvs/cvsplugin.cpp b/src/plugins/cvs/cvsplugin.cpp
index d0c3bd8e370131f28f47383791180424b1c34d4d..fbaeb0fdd0abeb41307bc17f979d52e00be9eb21 100644
--- a/src/plugins/cvs/cvsplugin.cpp
+++ b/src/plugins/cvs/cvsplugin.cpp
@@ -724,7 +724,9 @@ void CvsPlugin::diffProject()
 {
     const VcsBasePluginState state = currentState();
     QTC_ASSERT(state.hasProject(), return);
-    cvsDiff(state.currentProjectTopLevel(), state.relativeCurrentProject());
+    const QString relativeProject = state.relativeCurrentProject();
+    cvsDiff(state.currentProjectTopLevel(),
+            relativeProject.isEmpty() ? QStringList() : QStringList(relativeProject));
 }
 
 void CvsPlugin::diffCurrentFile()
@@ -738,7 +740,7 @@ void CvsPlugin::startCommitCurrentFile()
 {
     const VcsBasePluginState state = currentState();
     QTC_ASSERT(state.hasFile(), return);
-    startCommit(state.currentFileTopLevel(), QStringList(state.relativeCurrentFile()));
+    startCommit(state.currentFileTopLevel(), state.relativeCurrentFile());
 }
 
 void CvsPlugin::startCommitAll()
@@ -751,7 +753,7 @@ void CvsPlugin::startCommitAll()
 /* Start commit of files of a single repository by displaying
  * template and files in a submit editor. On closing, the real
  * commit will start. */
-void CvsPlugin::startCommit(const QString &workingDir, const QStringList &files)
+void CvsPlugin::startCommit(const QString &workingDir, const QString &file)
 {
     if (raiseSubmitEditor())
         return;
@@ -770,9 +772,9 @@ void CvsPlugin::startCommit(const QString &workingDir, const QStringList &files)
     // Get list of added/modified/deleted files and purge out undesired ones
     // (do not run status with relative arguments as it will omit the directories)
     StateList statusOutput = parseStatusOutput(QString(), response.stdOut);
-    if (!files.isEmpty()) {
+    if (!file.isEmpty()) {
         for (StateList::iterator it = statusOutput.begin(); it != statusOutput.end() ; ) {
-            if (files.contains(it->second))
+            if (file == it->second)
                 ++it;
             else
                 it = statusOutput.erase(it);
@@ -821,7 +823,7 @@ void CvsPlugin::filelogCurrentFile()
 {
     const VcsBasePluginState state = currentState();
     QTC_ASSERT(state.hasFile(), return);
-    filelog(state.currentFileTopLevel(), QStringList(state.relativeCurrentFile()), true);
+    filelog(state.currentFileTopLevel(), state.relativeCurrentFile(), true);
 }
 
 void CvsPlugin::logProject()
@@ -839,16 +841,16 @@ void CvsPlugin::logRepository()
 }
 
 void CvsPlugin::filelog(const QString &workingDir,
-                        const QStringList &files,
+                        const QString &file,
                         bool enableAnnotationContextMenu)
 {
-    QTextCodec *codec = VcsBaseEditorWidget::getCodec(workingDir, files);
+    QTextCodec *codec = VcsBaseEditorWidget::getCodec(workingDir, QStringList(file));
     // no need for temp file
-    const QString id = VcsBaseEditorWidget::getTitleId(workingDir, files);
-    const QString source = VcsBaseEditorWidget::getSource(workingDir, files);
+    const QString id = VcsBaseEditorWidget::getTitleId(workingDir, QStringList(file));
+    const QString source = VcsBaseEditorWidget::getSource(workingDir, file);
     QStringList args;
     args << QLatin1String("log");
-    args.append(files);
+    args.append(file);
     const CvsResponse response =
             runCvs(workingDir, args, m_settings.timeOutMS(),
                    SshPasswordPrompt, codec);
@@ -857,7 +859,7 @@ void CvsPlugin::filelog(const QString &workingDir,
 
     // Re-use an existing view if possible to support
     // the common usage pattern of continuously changing and diffing a file
-    const QString tag = VcsBaseEditorWidget::editorTag(LogOutput, workingDir, files);
+    const QString tag = VcsBaseEditorWidget::editorTag(LogOutput, workingDir, QStringList(file));
     if (Core::IEditor *editor = VcsBaseEditorWidget::locateEditorByTag(tag)) {
         editor->document()->setContents(response.stdOut.toUtf8());
         Core::EditorManager::activateEditor(editor);
@@ -877,11 +879,12 @@ void CvsPlugin::updateProject()
     update(state.currentProjectTopLevel(), state.relativeCurrentProject());
 }
 
-bool CvsPlugin::update(const QString &topLevel, const QStringList &files)
+bool CvsPlugin::update(const QString &topLevel, const QString &file)
 {
     QStringList args(QLatin1String("update"));
     args.push_back(QLatin1String("-dR"));
-    args.append(files);
+    if (!file.isEmpty())
+        args.append(file);
     const CvsResponse response =
             runCvs(topLevel, args, m_settings.longTimeOutMS(),
                    SshPasswordPrompt|ShowStdOutInLogWindow);
@@ -1012,10 +1015,11 @@ void CvsPlugin::annotate(const QString &workingDir, const QString &file,
     }
 }
 
-bool CvsPlugin::status(const QString &topLevel, const QStringList &files, const QString &title)
+bool CvsPlugin::status(const QString &topLevel, const QString &file, const QString &title)
 {
     QStringList args(QLatin1String("status"));
-    args.append(files);
+    if (!file.isEmpty())
+        args.append(file);
     const CvsResponse response =
             runCvs(topLevel, args, m_settings.timeOutMS(), 0);
     const bool ok = response.result == CvsResponse::Ok;
@@ -1049,14 +1053,14 @@ void CvsPlugin::statusRepository()
 {
     const VcsBasePluginState state = currentState();
     QTC_ASSERT(state.hasTopLevel(), return);
-    status(state.topLevel(), QStringList(), tr("Repository status"));
+    status(state.topLevel(), QString(), tr("Repository status"));
 }
 
 void CvsPlugin::updateRepository()
 {
     const VcsBasePluginState state = currentState();
     QTC_ASSERT(state.hasTopLevel(), return);
-    update(state.topLevel(), QStringList());
+    update(state.topLevel(), QString());
 
 }
 
diff --git a/src/plugins/cvs/cvsplugin.h b/src/plugins/cvs/cvsplugin.h
index 09b8a43522060e6201151702e7f14600b8392d6c..9608cd2e1bdc6af8653d24af916e34714989a90f 100644
--- a/src/plugins/cvs/cvsplugin.h
+++ b/src/plugins/cvs/cvsplugin.h
@@ -150,16 +150,16 @@ private:
     bool describe(const QString &toplevel, const QString &source, const QString &changeNr, QString *errorMessage);
     bool describe(const QString &repository, QList<CvsLogEntry> entries, QString *errorMessage);
     void filelog(const QString &workingDir,
-                 const QStringList &files = QStringList(),
+                 const QString &file = QString(),
                  bool enableAnnotationContextMenu = false);
     bool unedit(const QString &topLevel, const QStringList &files);
-    bool status(const QString &topLevel, const QStringList &files, const QString &title);
-    bool update(const QString &topLevel, const QStringList &files);
+    bool status(const QString &topLevel, const QString &file, const QString &title);
+    bool update(const QString &topLevel, const QString &file);
     bool checkCVSDirectory(const QDir &directory) const;
     // Quick check if files are modified
     bool diffCheckModified(const QString &topLevel, const QStringList &files, bool *modified);
     QString findTopLevelForDirectoryI(const QString &directory) const;
-    void startCommit(const QString &workingDir, const QStringList &files = QStringList());
+    void startCommit(const QString &workingDir, const QString &file = QString());
     bool commit(const QString &messageFile, const QStringList &subVersionFileList);
     void cleanCommitMessageFile();
     inline CvsControl *cvsVersionControl() const;
diff --git a/src/plugins/git/branchdialog.cpp b/src/plugins/git/branchdialog.cpp
index 0955b12bc1bdd4ab0a2d774302b6471ae555c9dd..7ae877f64d2e944b80590655adcb6d3c25765284 100644
--- a/src/plugins/git/branchdialog.cpp
+++ b/src/plugins/git/branchdialog.cpp
@@ -315,7 +315,7 @@ void BranchDialog::log()
     if (branchName.isEmpty())
         return;
     // Do not pass working dir by reference since it might change
-    GitPlugin::instance()->gitClient()->log(QString(m_repository), QStringList(), false, QStringList(branchName));
+    GitPlugin::instance()->gitClient()->log(QString(m_repository), QString(), false, QStringList(branchName));
 }
 
 void BranchDialog::merge()
diff --git a/src/plugins/git/gitclient.cpp b/src/plugins/git/gitclient.cpp
index 3ad47bd62048ea1c6f7dca4a5ecd57705485cb49..8b89f7f7be71b801788929a78f09ef648856d7dc 100644
--- a/src/plugins/git/gitclient.cpp
+++ b/src/plugins/git/gitclient.cpp
@@ -637,7 +637,7 @@ public:
                           const QString &directory,
                           bool enableAnnotationContextMenu,
                           const QStringList &args,
-                          const QStringList &fileNames) :
+                          const QString &fileName) :
         BaseGitDiffArgumentsWidget(client, directory, args),
         m_client(client),
         m_workingDirectory(directory),
@@ -657,24 +657,24 @@ public:
         QToolButton *graphButton = addToggleButton(graphArguments, tr("Graph"),
                                               tr("Show textual graph log."));
         mapSetting(graphButton, m_client->settings()->boolPointer(GitSettings::graphLogKey));
-        setFileNames(fileNames);
+        setFileName(fileName);
     }
 
-    void setFileNames(const QStringList &fileNames)
+    void setFileName(const QString &fileNames)
     {
-        m_fileNames = fileNames;
+        m_fileName = fileNames;
     }
 
     void executeCommand()
     {
-        m_client->log(m_workingDirectory, m_fileNames, m_enableAnnotationContextMenu, baseArguments());
+        m_client->log(m_workingDirectory, m_fileName, m_enableAnnotationContextMenu, baseArguments());
     }
 
 private:
     GitClient *m_client;
     QString m_workingDirectory;
     bool m_enableAnnotationContextMenu;
-    QStringList m_fileNames;
+    QString m_fileName;
 };
 
 class ConflictHandler : public QObject
@@ -1113,20 +1113,19 @@ void GitClient::status(const QString &workingDirectory)
             Qt::QueuedConnection);
 }
 
-void GitClient::log(const QString &workingDirectory, const QStringList &fileNames,
+void GitClient::log(const QString &workingDirectory, const QString &fileName,
                     bool enableAnnotationContextMenu, const QStringList &args)
 {
-    const QString msgArg = fileNames.empty() ? workingDirectory :
-                           fileNames.join(QLatin1String(", "));
+    const QString msgArg = fileName.isEmpty() ? workingDirectory : fileName;
     const QString title = tr("Git Log \"%1\"").arg(msgArg);
     const Core::Id editorId = Git::Constants::GIT_LOG_EDITOR_ID;
-    const QString sourceFile = VcsBase::VcsBaseEditorWidget::getSource(workingDirectory, fileNames);
+    const QString sourceFile = VcsBase::VcsBaseEditorWidget::getSource(workingDirectory, fileName);
     VcsBase::VcsBaseEditorWidget *editor = findExistingVCSEditor("logFileName", sourceFile);
     if (!editor)
         editor = createVcsEditor(editorId, title, sourceFile, CodecLogOutput, "logFileName", sourceFile,
                                  new GitLogArgumentsWidget(this, workingDirectory,
                                                            enableAnnotationContextMenu,
-                                                           args, fileNames));
+                                                           args, fileName));
     editor->setFileLogAnnotateEnabled(enableAnnotationContextMenu);
     editor->setDiffBaseDirectory(workingDirectory);
 
@@ -1140,13 +1139,13 @@ void GitClient::log(const QString &workingDirectory, const QStringList &fileName
 
     GitLogArgumentsWidget *argWidget = qobject_cast<GitLogArgumentsWidget *>(editor->configurationWidget());
     argWidget->setBaseArguments(args);
-    argWidget->setFileNames(fileNames);
+    argWidget->setFileName(fileName);
     QStringList userArgs = argWidget->arguments();
 
     arguments.append(userArgs);
 
-    if (!fileNames.isEmpty())
-        arguments << QLatin1String("--") << fileNames;
+    if (!fileName.isEmpty())
+        arguments << QLatin1String("--") << fileName;
 
     executeGit(workingDirectory, arguments, editor);
 }
diff --git a/src/plugins/git/gitclient.h b/src/plugins/git/gitclient.h
index 47e27ccf5b975ac379498ded12550844d9bebac6..fa7ac9a921215148fb3d10e9f46d1f1731ef5c75 100644
--- a/src/plugins/git/gitclient.h
+++ b/src/plugins/git/gitclient.h
@@ -146,7 +146,7 @@ public:
     void merge(const QString &workingDirectory, const QStringList &unmergedFileNames = QStringList());
 
     void status(const QString &workingDirectory);
-    void log(const QString &workingDirectory, const QStringList &fileNames = QStringList(),
+    void log(const QString &workingDirectory, const QString &fileName = QString(),
              bool enableAnnotationContextMenu = false, const QStringList &args = QStringList());
     void blame(const QString &workingDirectory, const QStringList &args, const QString &fileName,
                const QString &revision = QString(), int lineNumber = -1);
diff --git a/src/plugins/git/gitplugin.cpp b/src/plugins/git/gitplugin.cpp
index 6801a973900a01ca5c034a3a63a4c9586df0c10e..2df9f0b0872ad73f755d884f9c2150eb48440948 100644
--- a/src/plugins/git/gitplugin.cpp
+++ b/src/plugins/git/gitplugin.cpp
@@ -744,7 +744,9 @@ void GitPlugin::diffCurrentProject()
 {
     const VcsBase::VcsBasePluginState state = currentState();
     QTC_ASSERT(state.hasProject(), return);
-    m_gitClient->diff(state.currentProjectTopLevel(), state.relativeCurrentProject());
+    const QString relativeProject = state.relativeCurrentProject();
+    m_gitClient->diff(state.currentProjectTopLevel(),
+                      relativeProject.isEmpty() ? QStringList() : QStringList(relativeProject));
 }
 
 void GitPlugin::diffRepository()
@@ -758,7 +760,7 @@ void GitPlugin::logFile()
 {
     const VcsBase::VcsBasePluginState state = currentState();
     QTC_ASSERT(state.hasFile(), return);
-    m_gitClient->log(state.currentFileTopLevel(), QStringList(state.relativeCurrentFile()), true);
+    m_gitClient->log(state.currentFileTopLevel(), state.relativeCurrentFile(), true);
 }
 
 void GitPlugin::blameFile()
diff --git a/src/plugins/perforce/perforceplugin.cpp b/src/plugins/perforce/perforceplugin.cpp
index 282db9f209c1704dde781bafe7ed3d843ef0f3a9..14d76ff23b913be3f35adf4c75f86af39033e482 100644
--- a/src/plugins/perforce/perforceplugin.cpp
+++ b/src/plugins/perforce/perforceplugin.cpp
@@ -105,19 +105,16 @@ static inline QString debugCodec(const QTextCodec *c)
 
 // Ensure adding "..." to relative paths which is p4's convention
 // for the current directory
-static inline QStringList perforceRelativeFileArguments(const QStringList &args)
+static inline QString perforceRelativeFileArguments(const QString &args)
 {
     if (args.isEmpty())
-        return QStringList(QLatin1String("..."));
-    QTC_ASSERT(args.size() == 1, return QStringList());
-    QStringList p4Args = args;
-    p4Args.front() += QLatin1String("/...");
-    return p4Args;
+        return QLatin1String("...");
+    return args + QLatin1String("/...");
 }
 
 static inline QStringList perforceRelativeProjectDirectory(const VcsBase::VcsBasePluginState &s)
 {
-    return perforceRelativeFileArguments(s.relativeCurrentProject());
+    return QStringList(perforceRelativeFileArguments(s.relativeCurrentProject()));
 }
 
 // Clean user setting off diff-binary for 'p4 resolve' and 'p4 diff'.
@@ -735,7 +732,7 @@ void PerforcePlugin::filelogCurrentFile()
 {
     const VcsBase::VcsBasePluginState state = currentState();
     QTC_ASSERT(state.hasFile(), return);
-    filelog(state.currentFileTopLevel(), QStringList(state.relativeCurrentFile()), true);
+    filelog(state.currentFileTopLevel(), state.relativeCurrentFile(), true);
 }
 
 void PerforcePlugin::filelog()
@@ -743,7 +740,7 @@ void PerforcePlugin::filelog()
     const QString file = QFileDialog::getOpenFileName(0, tr("p4 filelog"));
     if (!file.isEmpty()) {
         const QFileInfo fi(file);
-        filelog(fi.absolutePath(), QStringList(fi.fileName()));
+        filelog(fi.absolutePath(), fi.fileName());
     }
 }
 
@@ -758,24 +755,25 @@ void PerforcePlugin::logRepository()
 {
     const VcsBase::VcsBasePluginState state = currentState();
     QTC_ASSERT(state.hasTopLevel(), return);
-    filelog(state.topLevel(), perforceRelativeFileArguments(QStringList()));
+    filelog(state.topLevel(), perforceRelativeFileArguments(QString()));
 }
 
-void PerforcePlugin::filelog(const QString &workingDir, const QStringList &fileNames,
+void PerforcePlugin::filelog(const QString &workingDir, const QString &fileName,
                              bool enableAnnotationContextMenu)
 {
-    const QString id = VcsBase::VcsBaseEditorWidget::getTitleId(workingDir, fileNames);
-    QTextCodec *codec = VcsBase::VcsBaseEditorWidget::getCodec(workingDir, fileNames);
+    const QString id = VcsBase::VcsBaseEditorWidget::getTitleId(workingDir, QStringList(fileName));
+    QTextCodec *codec = VcsBase::VcsBaseEditorWidget::getCodec(workingDir, QStringList(fileName));
     QStringList args;
     args << QLatin1String("filelog") << QLatin1String("-li");
     if (m_settings.logCount() > 0)
         args << QLatin1String("-m") << QString::number(m_settings.logCount());
-    args.append(fileNames);
+    if (!fileName.isEmpty())
+        args.append(fileName);
     const PerforceResponse result = runP4Cmd(workingDir, args,
                                              CommandToWindow|StdErrToWindow|ErrorToWindow,
                                              QStringList(), QByteArray(), codec);
     if (!result.error) {
-        const QString source = VcsBase::VcsBaseEditorWidget::getSource(workingDir, fileNames);
+        const QString source = VcsBase::VcsBaseEditorWidget::getSource(workingDir, fileName);
         Core::IEditor *editor = showOutputInEditor(tr("p4 filelog %1").arg(id), result.stdOut,
                                 VcsBase::LogOutput, source, codec);
         if (enableAnnotationContextMenu)
@@ -843,8 +841,8 @@ bool PerforcePlugin::managesDirectoryFstat(const QString &directory)
     bool managed = false;
     do {
         // Quick check: Must be at or below top level and not "../../other_path"
-        const QStringList relativeDirArgs = m_settings.relativeToTopLevelArguments(directory);
-        if (!relativeDirArgs.empty() && relativeDirArgs.front().startsWith(QLatin1String("..")))
+        const QString relativeDirArgs = m_settings.relativeToTopLevelArguments(directory);
+        if (!relativeDirArgs.isEmpty() && relativeDirArgs.startsWith(QLatin1String("..")))
             break;
         // Is it actually managed by perforce?
         QStringList args;
diff --git a/src/plugins/perforce/perforceplugin.h b/src/plugins/perforce/perforceplugin.h
index 5747b9414506421fc9e85c2300ba2091f6f53ddc..33d8f4737b0e93cde1252c144f51b13644ad85db 100644
--- a/src/plugins/perforce/perforceplugin.h
+++ b/src/plugins/perforce/perforceplugin.h
@@ -185,7 +185,7 @@ private:
     QString clientFilePath(const QString &serverFilePath);
     void annotate(const QString &workingDir, const QString &fileName,
                   const QString &changeList = QString(), int lineNumber = -1);
-    void filelog(const QString &workingDir, const QStringList &fileNames = QStringList(),
+    void filelog(const QString &workingDir, const QString &fileName = QString(),
                  bool enableAnnotationContextMenu = false);
     void cleanCommitMessageFile();
     bool isCommitEditorOpen() const;
diff --git a/src/plugins/perforce/perforcesettings.cpp b/src/plugins/perforce/perforcesettings.cpp
index 8579fa2f802c998c88c8c86946c42e51b3e314cc..822f4f90bbe9cc4c06dd1115c7e9eb2680853d81 100644
--- a/src/plugins/perforce/perforcesettings.cpp
+++ b/src/plugins/perforce/perforcesettings.cpp
@@ -241,10 +241,9 @@ QString PerforceSettings::relativeToTopLevel(const QString &dir) const
     return m_topLevelDir->relativeFilePath(dir);
 }
 
-QStringList PerforceSettings::relativeToTopLevelArguments(const QString &dir) const
+QString PerforceSettings::relativeToTopLevelArguments(const QString &dir) const
 {
-    const QString relative = relativeToTopLevel(dir);
-    return relative.isEmpty() ? QStringList() : QStringList(relative);
+    return relativeToTopLevel(dir);
 }
 
 // Map the root part of a path:
diff --git a/src/plugins/perforce/perforcesettings.h b/src/plugins/perforce/perforcesettings.h
index a84d81fc1671cf65a947847d2211667b2b01f0f4..17a7fdca3bea4b9db7044045fde9bc4a6b1d216f 100644
--- a/src/plugins/perforce/perforcesettings.h
+++ b/src/plugins/perforce/perforcesettings.h
@@ -117,7 +117,7 @@ public:
     QString relativeToTopLevel(const QString &dir) const;
     // Return argument list relative to top level (empty meaning,
     // it is the same directory).
-    QStringList relativeToTopLevelArguments(const QString &dir) const;
+    QString relativeToTopLevelArguments(const QString &dir) const;
 
     // Map p4 path back to file system in case of a symlinked top-level
     QString mapToFileSystem(const QString &perforceFilePath) const;
diff --git a/src/plugins/subversion/subversionplugin.cpp b/src/plugins/subversion/subversionplugin.cpp
index 7cdca762d366b2a4649a997e0f6c99348fa3c56f..13268bc36a027206211880dd72eae051844a9330 100644
--- a/src/plugins/subversion/subversionplugin.cpp
+++ b/src/plugins/subversion/subversionplugin.cpp
@@ -724,7 +724,8 @@ void SubversionPlugin::diffProject()
 {
     const VcsBase::VcsBasePluginState state = currentState();
     QTC_ASSERT(state.hasProject(), return);
-    svnDiff(state.currentProjectTopLevel(), state.relativeCurrentProject(), state.currentProjectName());
+    svnDiff(state.currentProjectTopLevel(), QStringList(state.relativeCurrentProject()),
+            state.currentProjectName());
 }
 
 void SubversionPlugin::diffCurrentFile()
@@ -820,7 +821,7 @@ void SubversionPlugin::filelogCurrentFile()
 {
     const VcsBase::VcsBasePluginState state = currentState();
     QTC_ASSERT(state.hasFile(), return);
-    filelog(state.currentFileTopLevel(), QStringList(state.relativeCurrentFile()), true);
+    filelog(state.currentFileTopLevel(), state.relativeCurrentFile(), true);
 }
 
 void SubversionPlugin::logProject()
@@ -858,13 +859,13 @@ void SubversionPlugin::updateRepository()
     svnUpdate(state.topLevel());
 }
 
-void SubversionPlugin::svnStatus(const QString &workingDir, const QStringList &relativePaths)
+void SubversionPlugin::svnStatus(const QString &workingDir, const QString &relativePath)
 {
     const VcsBase::VcsBasePluginState state = currentState();
     QTC_ASSERT(state.hasTopLevel(), return);
     QStringList args(QLatin1String("status"));
-    if (!relativePaths.isEmpty())
-        args.append(relativePaths);
+    if (!relativePath.isEmpty())
+        args.append(relativePath);
     VcsBase::VcsBaseOutputWindow *outwin = VcsBase::VcsBaseOutputWindow::instance();
     outwin->setRepository(workingDir);
     runSvn(workingDir, args, m_settings.timeOutMs(),
@@ -873,7 +874,7 @@ void SubversionPlugin::svnStatus(const QString &workingDir, const QStringList &r
 }
 
 void SubversionPlugin::filelog(const QString &workingDir,
-                               const QStringList &files,
+                               const QString &file,
                                bool enableAnnotationContextMenu)
 {
     // no need for temp file
@@ -882,7 +883,7 @@ void SubversionPlugin::filelog(const QString &workingDir,
         args << QLatin1String("-l")
              << QString::number(m_settings.intValue(SubversionSettings::logCountKey));
     }
-    foreach (const QString &file, files)
+    if (!file.isEmpty())
         args.append(QDir::toNativeSeparators(file));
 
     // subversion stores log in UTF-8 and returns it back in user system locale.
@@ -896,14 +897,15 @@ void SubversionPlugin::filelog(const QString &workingDir,
     // Re-use an existing view if possible to support
     // the common usage pattern of continuously changing and diffing a file
 
-    const QString id = VcsBase::VcsBaseEditorWidget::getTitleId(workingDir, files);
-    const QString tag = VcsBase::VcsBaseEditorWidget::editorTag(VcsBase::LogOutput, workingDir, files);
+    const QString id = VcsBase::VcsBaseEditorWidget::getTitleId(workingDir, QStringList(file));
+    const QString tag = VcsBase::VcsBaseEditorWidget::editorTag(VcsBase::LogOutput, workingDir,
+                                                                QStringList(file));
     if (Core::IEditor *editor = VcsBase::VcsBaseEditorWidget::locateEditorByTag(tag)) {
         editor->document()->setContents(response.stdOut.toUtf8());
         Core::EditorManager::activateEditor(editor);
     } else {
         const QString title = QString::fromLatin1("svn log %1").arg(id);
-        const QString source = VcsBase::VcsBaseEditorWidget::getSource(workingDir, files);
+        const QString source = VcsBase::VcsBaseEditorWidget::getSource(workingDir, file);
         Core::IEditor *newEditor = showOutputInEditor(title, response.stdOut, VcsBase::LogOutput, source, /*codec*/0);
         VcsBase::VcsBaseEditorWidget::tagEditor(newEditor, tag);
         if (enableAnnotationContextMenu)
@@ -918,12 +920,12 @@ void SubversionPlugin::updateProject()
     svnUpdate(state.currentProjectTopLevel(), state.relativeCurrentProject());
 }
 
-void SubversionPlugin::svnUpdate(const QString &workingDir, const QStringList &relativePaths)
+void SubversionPlugin::svnUpdate(const QString &workingDir, const QString &relativePath)
 {
     QStringList args(QLatin1String("update"));
     args.push_back(QLatin1String(nonInteractiveOptionC));
-    if (!relativePaths.isEmpty())
-        args.append(relativePaths);
+    if (!relativePath.isEmpty())
+        args.append(relativePath);
         const SubversionResponse response =
                 runSvn(workingDir, args, 10 * m_settings.timeOutMs(),
                        SshPasswordPrompt|ShowStdOutInLogWindow);
diff --git a/src/plugins/subversion/subversionplugin.h b/src/plugins/subversion/subversionplugin.h
index b92e5309af7e1fa4a8c37a605a75e9aa7b2116bd..f0664cc5c62130e3fb20932b2a983bc23cda64c7 100644
--- a/src/plugins/subversion/subversionplugin.h
+++ b/src/plugins/subversion/subversionplugin.h
@@ -169,10 +169,10 @@ private:
                               unsigned flags, QTextCodec *outputCodec = 0);
 
     void filelog(const QString &workingDir,
-                 const QStringList &file = QStringList(),
+                 const QString &file = QString(),
                  bool enableAnnotationContextMenu = false);
-    void svnStatus(const QString &workingDir, const QStringList &relativePath = QStringList());
-    void svnUpdate(const QString &workingDir, const QStringList &relativePaths = QStringList());
+    void svnStatus(const QString &workingDir, const QString &relativePath = QString());
+    void svnUpdate(const QString &workingDir, const QString &relativePath = QString());
     bool checkSVNSubDir(const QDir &directory, const QString &fileName = QString()) const;
     void startCommit(const QString &workingDir, const QStringList &files = QStringList());
     bool commit(const QString &messageFile, const QStringList &subVersionFileList);
diff --git a/src/plugins/vcsbase/vcsbaseplugin.cpp b/src/plugins/vcsbase/vcsbaseplugin.cpp
index 9d1905ccc7cf85d418730bc8fa4bca2f775d2c48..e47fb10f06435494326a58598164fada5ad15577 100644
--- a/src/plugins/vcsbase/vcsbaseplugin.cpp
+++ b/src/plugins/vcsbase/vcsbaseplugin.cpp
@@ -404,13 +404,12 @@ QString VcsBasePluginState::currentProjectTopLevel() const
     return data->m_state.currentProjectTopLevel;
 }
 
-QStringList VcsBasePluginState::relativeCurrentProject() const
+QString VcsBasePluginState::relativeCurrentProject() const
 {
-    QStringList rc;
-    QTC_ASSERT(hasProject(), return rc);
+    QTC_ASSERT(hasProject(), return QString());
     if (data->m_state.currentProjectTopLevel != data->m_state.currentProjectPath)
-        rc.append(QDir(data->m_state.currentProjectTopLevel).relativeFilePath(data->m_state.currentProjectPath));
-    return rc;
+        return QDir(data->m_state.currentProjectTopLevel).relativeFilePath(data->m_state.currentProjectPath);
+    return QString();
 }
 
 bool VcsBasePluginState::hasTopLevel() const
diff --git a/src/plugins/vcsbase/vcsbaseplugin.h b/src/plugins/vcsbase/vcsbaseplugin.h
index 8c1f5fe39b191a0454c985d8b3e1c86413db9c78..ed60b866ad4d8e30661a1f05f615c4f9fa963130 100644
--- a/src/plugins/vcsbase/vcsbaseplugin.h
+++ b/src/plugins/vcsbase/vcsbaseplugin.h
@@ -94,9 +94,9 @@ public:
     QString currentProjectName() const;
     QString currentProjectTopLevel() const;
     /* Convenience: Returns project path relative to top level if it
-     * differs from top level (else empty()) as an argument list to do
+     * differs from top level (else empty string) as an argument list to do
      * eg a 'vcs diff <args>' */
-    QStringList relativeCurrentProject() const;
+    QString relativeCurrentProject() const;
 
     // Top level directory for actions on the top level. Preferably
     // the file one.