diff --git a/src/plugins/vcsbase/submiteditorfile.cpp b/src/plugins/vcsbase/submiteditorfile.cpp
index 1b45212b71345999d1e2ac303a4621042dee4b43..473defa443d086656d75200f448190b190b657a8 100644
--- a/src/plugins/vcsbase/submiteditorfile.cpp
+++ b/src/plugins/vcsbase/submiteditorfile.cpp
@@ -29,6 +29,12 @@
 
 #include "submiteditorfile.h"
 
+#include "vcsbasesubmiteditor.h"
+
+#include <utils/fileutils.h>
+
+#include <QFileInfo>
+
 using namespace VcsBase;
 using namespace VcsBase::Internal;
 
@@ -39,10 +45,11 @@ using namespace VcsBase::Internal;
     submit editor files.
 */
 
-SubmitEditorFile::SubmitEditorFile(const QString &mimeType, QObject *parent) :
+SubmitEditorFile::SubmitEditorFile(const QString &mimeType, VcsBaseSubmitEditor *parent) :
     Core::IDocument(parent),
     m_mimeType(mimeType),
-    m_modified(false)
+    m_modified(false),
+    m_editor(parent)
 {
     setTemporary(true);
 }
@@ -57,7 +64,16 @@ void SubmitEditorFile::setModified(bool modified)
 
 bool SubmitEditorFile::save(QString *errorString, const QString &fileName, bool autoSave)
 {
-    emit saveMe(errorString, fileName, autoSave);
+    const QString fName = fileName.isEmpty() ? filePath() : fileName;
+    Utils::FileSaver saver(fName, QIODevice::WriteOnly | QIODevice::Truncate | QIODevice::Text);
+    saver.write(m_editor->fileContents());
+    if (!saver.finalize(errorString))
+        return false;
+    if (autoSave)
+        return true;
+    const QFileInfo fi(fName);
+    setFilePath(fi.absoluteFilePath());
+    setModified(false);
     if (!errorString->isEmpty())
         return false;
     emit changed();
diff --git a/src/plugins/vcsbase/submiteditorfile.h b/src/plugins/vcsbase/submiteditorfile.h
index ae0b0ab80ddf64174e5a3b77020877b3a6acab55..4b16ff785f14c8acd8bc4c52fe1e30d256394b0e 100644
--- a/src/plugins/vcsbase/submiteditorfile.h
+++ b/src/plugins/vcsbase/submiteditorfile.h
@@ -33,6 +33,8 @@
 #include <coreplugin/idocument.h>
 
 namespace VcsBase {
+class VcsBaseSubmitEditor;
+
 namespace Internal {
 
 class SubmitEditorFile : public Core::IDocument
@@ -40,7 +42,7 @@ class SubmitEditorFile : public Core::IDocument
     Q_OBJECT
 public:
     explicit SubmitEditorFile(const QString &mimeType,
-                              QObject *parent = 0);
+                              VcsBaseSubmitEditor *parent = 0);
 
     QString defaultPath() const { return QString(); }
     QString suggestedFileName() const { return QString(); }
@@ -54,12 +56,10 @@ public:
 
     void setModified(bool modified = true);
 
-signals:
-    void saveMe(QString *errorString, const QString &fileName, bool autoSave);
-
 private:
     const QString m_mimeType;
     bool m_modified;
+    VcsBaseSubmitEditor *m_editor;
 };
 
 
diff --git a/src/plugins/vcsbase/vcsbasesubmiteditor.cpp b/src/plugins/vcsbase/vcsbasesubmiteditor.cpp
index 8b4be858e5191cba839fef1ced561f36154b6960..9f482ba6d32097733a59fc76c60e9bd45d56337c 100644
--- a/src/plugins/vcsbase/vcsbasesubmiteditor.cpp
+++ b/src/plugins/vcsbase/vcsbasesubmiteditor.cpp
@@ -146,7 +146,7 @@ struct VcsBaseSubmitEditorPrivate
 {
     VcsBaseSubmitEditorPrivate(const VcsBaseSubmitEditorParameters *parameters,
                                SubmitEditorWidget *editorWidget,
-                               QObject *q);
+                               VcsBaseSubmitEditor *q);
 
     SubmitEditorWidget *m_widget;
     QToolBar *m_toolWidget;
@@ -163,7 +163,7 @@ struct VcsBaseSubmitEditorPrivate
 
 VcsBaseSubmitEditorPrivate::VcsBaseSubmitEditorPrivate(const VcsBaseSubmitEditorParameters *parameters,
                                                        SubmitEditorWidget *editorWidget,
-                                                       QObject *q) :
+                                                       VcsBaseSubmitEditor *q) :
     m_widget(editorWidget),
     m_toolWidget(0),
     m_parameters(parameters),
@@ -194,8 +194,6 @@ VcsBaseSubmitEditor::VcsBaseSubmitEditor(const VcsBaseSubmitEditorParameters *pa
 
     d->m_file->setModified(false);
     // We are always clean to prevent the editor manager from asking to save.
-    connect(d->m_file, SIGNAL(saveMe(QString*,QString,bool)),
-            this, SLOT(save(QString*,QString,bool)));
 
     connect(d->m_widget, SIGNAL(diffSelected(QList<int>)), this, SLOT(slotDiffSelectedVcsFiles(QList<int>)));
     connect(d->m_widget->descriptionEdit(), SIGNAL(textChanged()), this, SLOT(slotDescriptionChanged()));
@@ -515,21 +513,6 @@ void VcsBaseSubmitEditor::slotDiffSelectedVcsFiles(const QList<int> &rawList)
         emit diffSelectedFiles(rowsToFiles(rawList));
 }
 
-bool VcsBaseSubmitEditor::save(QString *errorString, const QString &fileName, bool autoSave)
-{
-    const QString fName = fileName.isEmpty() ? d->m_file->filePath() : fileName;
-    Utils::FileSaver saver(fName, QIODevice::WriteOnly | QIODevice::Truncate | QIODevice::Text);
-    saver.write(fileContents());
-    if (!saver.finalize(errorString))
-        return false;
-    if (autoSave)
-        return true;
-    const QFileInfo fi(fName);
-    d->m_file->setFilePath(fi.absoluteFilePath());
-    d->m_file->setModified(false);
-    return true;
-}
-
 QByteArray VcsBaseSubmitEditor::fileContents() const
 {
     return d->m_widget->descriptionText().toLocal8Bit();
diff --git a/src/plugins/vcsbase/vcsbasesubmiteditor.h b/src/plugins/vcsbase/vcsbasesubmiteditor.h
index 273586ad1c20e0dcb70fe03700d7364aa29759c8..087f2ce98a27eee59512a09ecacc385c06312a12 100644
--- a/src/plugins/vcsbase/vcsbasesubmiteditor.h
+++ b/src/plugins/vcsbase/vcsbasesubmiteditor.h
@@ -44,6 +44,7 @@ QT_END_NAMESPACE
 namespace VcsBase {
 namespace Internal {
     class CommonVcsSettings;
+    class SubmitEditorFile;
 }
 struct VcsBaseSubmitEditorPrivate;
 class SubmitEditorWidget;
@@ -143,7 +144,6 @@ signals:
 
 private slots:
     void slotDiffSelectedVcsFiles(const QList<int> &rawList);
-    bool save(QString *errorString, const QString &fileName, bool autoSave);
     void slotDescriptionChanged();
     void slotCheckSubmitMessage();
     void slotInsertNickName();
@@ -168,6 +168,7 @@ private:
     QString promptForNickName();
 
     VcsBaseSubmitEditorPrivate *d;
+    friend class Internal::SubmitEditorFile; // for the file contents
 };
 
 } // namespace VcsBase