diff --git a/src/plugins/git/gitplugin.cpp b/src/plugins/git/gitplugin.cpp
index 702f2aa770c859419718aeebec03eb9441fda198..4f240a21fe8111e15af6a90bb651bf03de184d31 100644
--- a/src/plugins/git/gitplugin.cpp
+++ b/src/plugins/git/gitplugin.cpp
@@ -588,6 +588,8 @@ void GitPlugin::revertFile()
 
 void GitPlugin::startCommit()
 {
+    if (VCSBase::VCSBaseSubmitEditor::raiseSubmitEditor())
+        return;
     if (m_changeTmpFile) {
         m_outputWindow->append(tr("Another submit is currently beeing executed."));
         m_outputWindow->popup(false);
diff --git a/src/plugins/perforce/perforceplugin.cpp b/src/plugins/perforce/perforceplugin.cpp
index 4c4c3190755c10d6015ea34f6021c7745529037a..2bbbb705aefacfa02d2790c6499f8556aa3bec8f 100644
--- a/src/plugins/perforce/perforceplugin.cpp
+++ b/src/plugins/perforce/perforceplugin.cpp
@@ -485,6 +485,9 @@ void PerforcePlugin::printOpenedFileList()
 
 void PerforcePlugin::submit()
 {
+    if (VCSBase::VCSBaseSubmitEditor::raiseSubmitEditor())
+        return;
+
     if (!checkP4Command()) {
         showOutput(tr("No p4 executable specified!"), true);
         return;
diff --git a/src/plugins/subversion/subversionplugin.cpp b/src/plugins/subversion/subversionplugin.cpp
index 2cb82e13f89014b3a0ff9678d5787ba4470b3727..532beecdf45f6ac7abd661c67ad9c434e9c4de22 100644
--- a/src/plugins/subversion/subversionplugin.cpp
+++ b/src/plugins/subversion/subversionplugin.cpp
@@ -712,7 +712,8 @@ void SubversionPlugin::startCommit(const QStringList &files)
 {
     if (files.empty())
         return;
-
+    if (VCSBase::VCSBaseSubmitEditor::raiseSubmitEditor())
+        return;
     if (m_changeTmpFile) {
         showOutput(tr("Another commit is currently being executed."));
         return;
diff --git a/src/plugins/vcsbase/vcsbasesubmiteditor.cpp b/src/plugins/vcsbase/vcsbasesubmiteditor.cpp
index 204c825793907b49b13ef1e1316b25bbd2d2690a..a77455f44fc803c5f6d1db572c4a8868e879ecd9 100644
--- a/src/plugins/vcsbase/vcsbasesubmiteditor.cpp
+++ b/src/plugins/vcsbase/vcsbasesubmiteditor.cpp
@@ -36,6 +36,7 @@
 #include <aggregation/aggregate.h>
 #include <coreplugin/ifile.h>
 #include <coreplugin/icore.h>
+#include <coreplugin/editormanager/editormanager.h>
 #include <coreplugin/uniqueidmanager.h>
 #include <coreplugin/actionmanager/actionmanager.h>
 #include <utils/submiteditorwidget.h>
@@ -592,4 +593,23 @@ QStringList VCSBaseSubmitEditor::currentProjectFiles(bool nativeSeparators, QStr
     }
     return files;
 }
+
+// Helper to raise an already open submit editor to prevent opening twice.
+bool VCSBaseSubmitEditor::raiseSubmitEditor()
+{
+    Core::EditorManager *em = Core::EditorManager::instance();
+    // Nothing to do?
+    if (Core::IEditor *ce = em->currentEditor())
+        if (qobject_cast<VCSBaseSubmitEditor*>(ce))
+            return true;
+    // Try to activate a hidden one
+    foreach (Core::IEditor *e, em->openedEditors()) {
+        if (qobject_cast<VCSBaseSubmitEditor*>(e)) {
+            em->activateEditor(e, Core::EditorManager::IgnoreNavigationHistory);
+            return true;
+        }
+    }
+    return false;
+}
+
 } // namespace VCSBase
diff --git a/src/plugins/vcsbase/vcsbasesubmiteditor.h b/src/plugins/vcsbase/vcsbasesubmiteditor.h
index 6b0138df396c2d4e4a8089672ceb1c6214d425e8..f949177aade217726769d2cd7559a1dcca240e03 100644
--- a/src/plugins/vcsbase/vcsbasesubmiteditor.h
+++ b/src/plugins/vcsbase/vcsbasesubmiteditor.h
@@ -159,7 +159,10 @@ public:
     // be restricted to them
     static QStringList currentProjectFiles(bool nativeSeparators, QString *name = 0);
 
-    bool temporaryEditor() const { return true; }
+    virtual bool temporaryEditor() const { return true; }
+
+    // Helper to raise an already open submit editor to prevent opening twice.
+    static bool raiseSubmitEditor();
 
 signals:
     void diffSelectedFiles(const QStringList &files);