diff --git a/src/plugins/git/gitsubmiteditor.cpp b/src/plugins/git/gitsubmiteditor.cpp
index a9177ff09cceadd7d8c11724b59a70e19cf482fe..d318580b5159e1d50407dfe749e95f72c9c030bd 100644
--- a/src/plugins/git/gitsubmiteditor.cpp
+++ b/src/plugins/git/gitsubmiteditor.cpp
@@ -61,7 +61,8 @@ public:
             for (; j < source->rowCount(); ++j) {
                 CommitData::StateFilePair sourceStateFile = gitSource->stateFilePair(j);
                 if (stateFile == sourceStateFile) {
-                    setChecked(i, source->checked(j));
+                    if (isCheckable(i) && source->isCheckable(j))
+                        setChecked(i, source->checked(j));
                     break;
                 } else if (stateFile < sourceStateFile) {
                     break;
diff --git a/src/plugins/vcsbase/submitfilemodel.cpp b/src/plugins/vcsbase/submitfilemodel.cpp
index 89555876acbe203a5844d55e154430559d601778..5c9eee854dfe2a0c6a094efae597081867932d56 100644
--- a/src/plugins/vcsbase/submitfilemodel.cpp
+++ b/src/plugins/vcsbase/submitfilemodel.cpp
@@ -48,10 +48,12 @@ static QList<QStandardItem *> createFileRow(const QString &fileName, const QStri
                                             CheckMode checked, const QVariant &v)
 {
     QStandardItem *statusItem = new QStandardItem(status);
-    statusItem->setCheckable(checked != Uncheckable);
-    if (checked != Uncheckable)
+    Qt::ItemFlags flags = Qt::ItemIsSelectable | Qt::ItemIsEnabled;
+    if (checked != Uncheckable) {
+        flags |= Qt::ItemIsUserCheckable;
         statusItem->setCheckState(checked == Checked ? Qt::Checked : Qt::Unchecked);
-    statusItem->setFlags(Qt::ItemIsSelectable|Qt::ItemIsUserCheckable|Qt::ItemIsEnabled);
+    }
+    statusItem->setFlags(flags);
     statusItem->setData(v);
     QStandardItem *fileItem = new QStandardItem(fileName);
     fileItem->setFlags(Qt::ItemIsSelectable|Qt::ItemIsEnabled);
@@ -103,6 +105,13 @@ QString SubmitFileModel::file(int row) const
     return item(row, fileColumn)->text();
 }
 
+bool SubmitFileModel::isCheckable(int row) const
+{
+    if (row < 0 || row >= rowCount())
+        return false;
+    return item(row)->isCheckable();
+}
+
 bool SubmitFileModel::checked(int row) const
 {
     if (row < 0 || row >= rowCount())
@@ -166,7 +175,8 @@ void SubmitFileModel::updateSelections(SubmitFileModel *source)
         // to test rows earlier than latest match found
         for (int j = lastMatched; j < sourceRows; ++j) {
             if (file(i) == source->file(j) && state(i) == source->state(j)) {
-                setChecked(i, source->checked(j));
+                if (isCheckable(i) && source->isCheckable(j))
+                    setChecked(i, source->checked(j));
                 lastMatched = j + 1; // No duplicates, start on next entry
                 break;
             }
diff --git a/src/plugins/vcsbase/submitfilemodel.h b/src/plugins/vcsbase/submitfilemodel.h
index 216e8efbd19536229f23eee4080585421b681d7e..aa523335cf0ed52fd16c73bd6f370f796dbf76d6 100644
--- a/src/plugins/vcsbase/submitfilemodel.h
+++ b/src/plugins/vcsbase/submitfilemodel.h
@@ -55,6 +55,7 @@ public:
 
     QString state(int row) const;
     QString file(int row) const;
+    bool isCheckable(int row) const;
     bool checked(int row) const;
     void setChecked(int row, bool check);
     void setAllChecked(bool check);