diff --git a/src/plugins/bazaar/commiteditor.cpp b/src/plugins/bazaar/commiteditor.cpp
index 332f7539493eb1807024f028338e3d699b1c1a16..c2372d06f1abd6ea0e97d305c255c92557bd6f30 100644
--- a/src/plugins/bazaar/commiteditor.cpp
+++ b/src/plugins/bazaar/commiteditor.cpp
@@ -61,8 +61,9 @@ void CommitEditor::setFields(const QString &repositoryRoot,
     bazaarWidget->setFields(branch, userName, email);
 
     m_fileModel = new VcsBase::SubmitFileModel(this);
+    m_fileModel->setRepositoryRoot(repositoryRoot);
     foreach (const VcsBase::VcsBaseClient::StatusItem &item, repoStatus)
         if (item.flags != QLatin1String("Unknown"))
             m_fileModel->addFile(item.file, item.flags);
-    setFileModel(m_fileModel, repositoryRoot);
+    setFileModel(m_fileModel);
 }
diff --git a/src/plugins/clearcase/clearcasesubmiteditor.cpp b/src/plugins/clearcase/clearcasesubmiteditor.cpp
index 2f36dabcafb06da9000158faaad406d3688d4755..f4936c4cb99a03cb056fddb39498ddc1887de97f 100644
--- a/src/plugins/clearcase/clearcasesubmiteditor.cpp
+++ b/src/plugins/clearcase/clearcasesubmiteditor.cpp
@@ -58,11 +58,12 @@ void ClearCaseSubmitEditor::setStatusList(const QStringList &statusOutput)
 {
     typedef QStringList::const_iterator ConstIterator;
     auto model = new VcsBase::SubmitFileModel(this);
+    model->setRepositoryRoot(checkScriptWorkingDirectory());
 
     const ConstIterator cend = statusOutput.constEnd();
     for (ConstIterator it = statusOutput.constBegin(); it != cend; ++it)
         model->addFile(*it, QLatin1String("C"));
-    setFileModel(model, checkScriptWorkingDirectory());
+    setFileModel(model);
     if (statusOutput.count() > 1)
         submitEditorWidget()->addKeep();
 }
diff --git a/src/plugins/git/gitsubmiteditor.cpp b/src/plugins/git/gitsubmiteditor.cpp
index 298e154c87703bf1bf9b07106bb14ce0b848dcde..819b9b73c698817faf036765b24b09ed4829aeb4 100644
--- a/src/plugins/git/gitsubmiteditor.cpp
+++ b/src/plugins/git/gitsubmiteditor.cpp
@@ -174,6 +174,7 @@ void GitSubmitEditor::setCommitData(const CommitData &d)
     setEmptyFileListEnabled(m_commitType == AmendCommit); // Allow for just correcting the message
 
     m_model = new GitSubmitFileModel(this);
+    m_model->setRepositoryRoot(d.panelInfo.repository);
     if (!d.files.isEmpty()) {
         for (QList<CommitData::StateFilePair>::const_iterator it = d.files.constBegin();
              it != d.files.constEnd(); ++it) {
@@ -192,7 +193,7 @@ void GitSubmitEditor::setCommitData(const CommitData &d)
                              QVariant(static_cast<int>(state)));
         }
     }
-    setFileModel(m_model, d.panelInfo.repository);
+    setFileModel(m_model);
 }
 
 void GitSubmitEditor::slotDiffSelected(const QList<int> &rows)
diff --git a/src/plugins/mercurial/commiteditor.cpp b/src/plugins/mercurial/commiteditor.cpp
index 724ce2d100f534e9bab443b943179d61d7f89d33..4ab9e4f5b7b8e0557aada883992459de4fed3580 100644
--- a/src/plugins/mercurial/commiteditor.cpp
+++ b/src/plugins/mercurial/commiteditor.cpp
@@ -64,6 +64,7 @@ void CommitEditor::setFields(const QFileInfo &repositoryRoot, const QString &bra
     mercurialWidget->setFields(repositoryRoot.absoluteFilePath(), branch, userName, email);
 
     fileModel = new SubmitFileModel(this);
+    fileModel->setRepositoryRoot(repositoryRoot.absoluteFilePath());
 
     QStringList shouldTrack;
 
@@ -74,8 +75,7 @@ void CommitEditor::setFields(const QFileInfo &repositoryRoot, const QString &bra
             fileModel->addFile(item.file, item.flags, Unchecked);
     }
 
-    VcsBaseSubmitEditor::filterUntrackedFilesOfProject(repositoryRoot.absoluteFilePath(),
-                                                                &shouldTrack);
+    VcsBaseSubmitEditor::filterUntrackedFilesOfProject(fileModel->repositoryRoot(), &shouldTrack);
 
     foreach (const QString &track, shouldTrack) {
         foreach (const VcsBaseClient::StatusItem &item, repoStatus) {
@@ -84,7 +84,7 @@ void CommitEditor::setFields(const QFileInfo &repositoryRoot, const QString &bra
         }
     }
 
-    setFileModel(fileModel, repositoryRoot.absoluteFilePath());
+    setFileModel(fileModel);
 }
 
 QString CommitEditor::committerInfo()
diff --git a/src/plugins/subversion/subversionsubmiteditor.cpp b/src/plugins/subversion/subversionsubmiteditor.cpp
index 9483d720bc6f0c52fc5362916f6f2ed1a4f87c89..21186879c86b76d349df026b21434a26ebb00389 100644
--- a/src/plugins/subversion/subversionsubmiteditor.cpp
+++ b/src/plugins/subversion/subversionsubmiteditor.cpp
@@ -47,13 +47,14 @@ void SubversionSubmitEditor::setStatusList(const QList<StatusFilePair> &statusOu
 {
     typedef QList<StatusFilePair>::const_iterator ConstIterator;
     auto model = new VcsBase::SubmitFileModel(this);
+    // Hack to allow completion in "description" field : completion needs a root repository, the
+    // checkScriptWorkingDirectory property is fine (at this point it was set by SubversionPlugin)
+    model->setRepositoryRoot(checkScriptWorkingDirectory());
 
     const ConstIterator cend = statusOutput.constEnd();
     for (ConstIterator it = statusOutput.constBegin(); it != cend; ++it)
         model->addFile(it->second, it->first);
-    // Hack to allow completion in "description" field : completion needs a root repository, the
-    // checkScriptWorkingDirectory property is fine (at this point it was set by SubversionPlugin)
-    setFileModel(model, this->checkScriptWorkingDirectory());
+    setFileModel(model);
 }
 
 QByteArray SubversionSubmitEditor::fileContents() const
diff --git a/src/plugins/vcsbase/submitfilemodel.cpp b/src/plugins/vcsbase/submitfilemodel.cpp
index 354bd39c6601f529a336229a81eca9d70216a425..8bfbba6036f21176a27e0569336c6f0cc7f1fde9 100644
--- a/src/plugins/vcsbase/submitfilemodel.cpp
+++ b/src/plugins/vcsbase/submitfilemodel.cpp
@@ -45,8 +45,11 @@ namespace VcsBase {
 
 enum { fileColumn = 1 };
 
-static QList<QStandardItem *> createFileRow(const QString &fileName, const QString &status,
-                                            CheckMode checked, const QVariant &v)
+static QList<QStandardItem *> createFileRow(const QString &repositoryRoot,
+                                            const QString &fileName,
+                                            const QString &status,
+                                            CheckMode checked,
+                                            const QVariant &v)
 {
     auto statusItem = new QStandardItem(status);
     Qt::ItemFlags flags = Qt::ItemIsSelectable | Qt::ItemIsEnabled;
@@ -58,7 +61,11 @@ static QList<QStandardItem *> createFileRow(const QString &fileName, const QStri
     statusItem->setData(v);
     auto fileItem = new QStandardItem(fileName);
     fileItem->setFlags(Qt::ItemIsSelectable|Qt::ItemIsEnabled);
-    fileItem->setIcon(Core::FileIconProvider::icon(fileName));
+    // For some reason, Windows (at least) requires a valid (existing) file path to the icon, so
+    // the repository root is needed here.
+    // Note: for "overlaid" icons in Core::FileIconProvider a valid file path is not required
+    const QFileInfo fi(repositoryRoot + QLatin1Char('/') + fileName);
+    fileItem->setIcon(Core::FileIconProvider::icon(fi));
     QList<QStandardItem *> row;
     row << statusItem << fileItem;
     return row;
@@ -86,10 +93,20 @@ SubmitFileModel::SubmitFileModel(QObject *parent) :
     setHorizontalHeaderLabels(headerLabels);
 }
 
+const QString &SubmitFileModel::repositoryRoot() const
+{
+    return m_repositoryRoot;
+}
+
+void SubmitFileModel::setRepositoryRoot(const QString &repoRoot)
+{
+    m_repositoryRoot = repoRoot;
+}
+
 QList<QStandardItem *> SubmitFileModel::addFile(const QString &fileName, const QString &status, CheckMode checkMode,
                                                 const QVariant &v)
 {
-    const QList<QStandardItem *> row = createFileRow(fileName, status, checkMode, v);
+    const QList<QStandardItem *> row = createFileRow(m_repositoryRoot, fileName, status, checkMode, v);
     appendRow(row);
     return row;
 }
diff --git a/src/plugins/vcsbase/submitfilemodel.h b/src/plugins/vcsbase/submitfilemodel.h
index ccb17906ba81dd0e1b69e3632c9ca10249e762a7..db5bec44a27676848ee9216f1f4ff00de1327886 100644
--- a/src/plugins/vcsbase/submitfilemodel.h
+++ b/src/plugins/vcsbase/submitfilemodel.h
@@ -50,6 +50,9 @@ class VCSBASE_EXPORT SubmitFileModel : public QStandardItemModel
 public:
     explicit SubmitFileModel(QObject *parent = 0);
 
+    const QString &repositoryRoot() const;
+    void setRepositoryRoot(const QString &repoRoot);
+
     // Convenience to create and add rows containing a file plus status text.
     QList<QStandardItem *> addFile(const QString &fileName, const QString &status = QString(),
                                    CheckMode checkMode = Checked, const QVariant &data = QVariant());
@@ -69,6 +72,9 @@ public:
     unsigned int filterFiles(const QStringList &filter);
 
     virtual void updateSelections(SubmitFileModel *source);
+
+private:
+    QString m_repositoryRoot;
 };
 
 } // namespace VcsBase
diff --git a/src/plugins/vcsbase/vcsbasesubmiteditor.cpp b/src/plugins/vcsbase/vcsbasesubmiteditor.cpp
index b0610527c12c195691de7a4a2bda19ec3bbf84bf..2b40ceb67ea549625b9591a546b232caf3f51527 100644
--- a/src/plugins/vcsbase/vcsbasesubmiteditor.cpp
+++ b/src/plugins/vcsbase/vcsbasesubmiteditor.cpp
@@ -432,7 +432,7 @@ QStringList VcsBaseSubmitEditor::checkedFiles() const
     return d->m_widget->checkedFiles();
 }
 
-void VcsBaseSubmitEditor::setFileModel(SubmitFileModel *model, const QString &repositoryDirectory)
+void VcsBaseSubmitEditor::setFileModel(SubmitFileModel *model)
 {
     QTC_ASSERT(model, return);
     if (SubmitFileModel *oldModel = d->m_widget->fileModel()) {
@@ -446,7 +446,7 @@ void VcsBaseSubmitEditor::setFileModel(SubmitFileModel *model, const QString &re
 
     // Iterate over the files and get interesting symbols
     for (int row = 0; row < model->rowCount(); ++row) {
-        const QFileInfo fileInfo(repositoryDirectory, model->file(row));
+        const QFileInfo fileInfo(model->repositoryRoot(), model->file(row));
 
         // Add file name
         uniqueSymbols.insert(fileInfo.fileName());
diff --git a/src/plugins/vcsbase/vcsbasesubmiteditor.h b/src/plugins/vcsbase/vcsbasesubmiteditor.h
index 4adefffd3b0e91cc9c6f47132780f15921ebfc5d..5bfbf38a52b83027929ed883ea3c87d41748aa5c 100644
--- a/src/plugins/vcsbase/vcsbasesubmiteditor.h
+++ b/src/plugins/vcsbase/vcsbasesubmiteditor.h
@@ -121,7 +121,7 @@ public:
 
     QStringList checkedFiles() const;
 
-    void setFileModel(SubmitFileModel *m, const QString &repositoryDirectory = QString());
+    void setFileModel(SubmitFileModel *m);
     SubmitFileModel *fileModel() const;
     virtual void updateFileModel() { }
     QStringList rowsToFiles(const QList<int> &rows) const;