diff --git a/src/plugins/bineditor/bineditorplugin.cpp b/src/plugins/bineditor/bineditorplugin.cpp
index 251655ba7a1b6cb3f2bc6024a9a190dc641941cf..cf44f63885dc7dfecc0e76a9667ce0905f5af944 100644
--- a/src/plugins/bineditor/bineditorplugin.cpp
+++ b/src/plugins/bineditor/bineditorplugin.cpp
@@ -195,6 +195,14 @@ public:
         return QLatin1String(Constants::C_BINEDITOR_MIMETYPE);
     }
 
+    bool setContents(const QByteArray &contents)
+    {
+        if (!contents.isEmpty())
+            return false;
+        m_widget->clear();
+        return true;
+    }
+
     bool save(QString *errorString, const QString &fn, bool autoSave)
     {
         QTC_ASSERT(!autoSave, return true); // bineditor does not support autosave - it would be a bit expensive
@@ -342,11 +350,6 @@ public:
         delete m_widget;
     }
 
-    bool createNew(const QString & /* contents */ = QString()) {
-        m_widget->clear();
-        m_file->setFilePath(QString());
-        return true;
-    }
     bool open(QString *errorString, const QString &fileName, const QString &realFileName) {
         QTC_ASSERT(fileName == realFileName, return false); // The bineditor can do no autosaving
         return m_file->open(errorString, fileName);
diff --git a/src/plugins/clearcase/clearcaseplugin.cpp b/src/plugins/clearcase/clearcaseplugin.cpp
index 8019652691d3c64f2222df20f59516a9cae84c4b..baf323a54bb205cb717fc1c67b8a4ff69d3181df 100644
--- a/src/plugins/clearcase/clearcaseplugin.cpp
+++ b/src/plugins/clearcase/clearcaseplugin.cpp
@@ -929,7 +929,7 @@ void ClearCasePlugin::ccDiffWithPred(const QString &workingDir, const QStringLis
     if (files.count() == 1) {
         // Show in the same editor if diff has been executed before
         if (Core::IEditor *existingEditor = VcsBase::VcsBaseEditorWidget::locateEditorByTag(tag)) {
-            existingEditor->createNew(result);
+            existingEditor->document()->setContents(result.toUtf8());
             Core::EditorManager::activateEditor(existingEditor);
             setDiffBaseDirectory(existingEditor, workingDir);
             return;
@@ -1189,7 +1189,7 @@ void ClearCasePlugin::history(const QString &workingDir,
     const QString id = VcsBase::VcsBaseEditorWidget::getTitleId(workingDir, files);
     const QString tag = VcsBase::VcsBaseEditorWidget::editorTag(VcsBase::LogOutput, workingDir, files);
     if (Core::IEditor *editor = VcsBase::VcsBaseEditorWidget::locateEditorByTag(tag)) {
-        editor->createNew(response.stdOut);
+        editor->document()->setContents(response.stdOut.toUtf8());
         Core::EditorManager::activateEditor(editor);
     } else {
         const QString title = QString::fromLatin1("cc history %1").arg(id);
@@ -1301,7 +1301,7 @@ void ClearCasePlugin::vcsAnnotate(const QString &workingDir, const QString &file
     const QStringList files = QStringList(file);
     const QString tag = VcsBase::VcsBaseEditorWidget::editorTag(VcsBase::AnnotateOutput, workingDir, files);
     if (Core::IEditor *editor = VcsBase::VcsBaseEditorWidget::locateEditorByTag(tag)) {
-        editor->createNew(res);
+        editor->document()->setContents(res.toUtf8());
         VcsBase::VcsBaseEditorWidget::gotoLineOfEditor(editor, lineNumber);
         Core::EditorManager::activateEditor(editor);
     } else {
@@ -1338,7 +1338,7 @@ void ClearCasePlugin::describe(const QString &source, const QString &changeNr)
     // the common usage pattern of continuously changing and diffing a file
     const QString tag = VcsBase::VcsBaseEditorWidget::editorTag(VcsBase::DiffOutput, source, QStringList(), changeNr);
     if (Core::IEditor *editor = VcsBase::VcsBaseEditorWidget::locateEditorByTag(tag)) {
-        editor->createNew(description);
+        editor->document()->setContents(description.toUtf8());
         Core::EditorManager::activateEditor(editor);
     } else {
         const QString title = QString::fromLatin1("cc describe %1").arg(id);
@@ -1397,7 +1397,7 @@ Core::IEditor *ClearCasePlugin::showOutputInEditor(const QString& title, const Q
         qDebug() << "ClearCasePlugin::showOutputInEditor" << title << id.name()
                  <<  "Size= " << output.size() <<  " Type=" << editorType << debugCodec(codec);
     QString s = title;
-    Core::IEditor *editor = Core::EditorManager::openEditorWithContents(id, &s, output);
+    Core::IEditor *editor = Core::EditorManager::openEditorWithContents(id, &s, output.toUtf8());
     connect(editor, SIGNAL(annotateRevisionRequested(QString,QString,int)),
             this, SLOT(annotateVersion(QString,QString,int)));
     ClearCaseEditor *e = qobject_cast<ClearCaseEditor*>(editor->widget());
diff --git a/src/plugins/coreplugin/editormanager/editormanager.cpp b/src/plugins/coreplugin/editormanager/editormanager.cpp
index 6cc7a85bf0bab00734e57fb69d7ef7a3a0b408a5..cde356c18e9c408962a7eddc83306d5a21f121bb 100644
--- a/src/plugins/coreplugin/editormanager/editormanager.cpp
+++ b/src/plugins/coreplugin/editormanager/editormanager.cpp
@@ -1627,7 +1627,7 @@ QStringList EditorManager::getOpenFileNames() const
 
 IEditor *EditorManager::openEditorWithContents(const Id &editorId,
                                         QString *titlePattern,
-                                        const QString &contents)
+                                        const QByteArray &contents)
 {
     if (debugEditorManager)
         qDebug() << Q_FUNC_INFO << editorId.name() << titlePattern << contents;
@@ -1669,7 +1669,7 @@ IEditor *EditorManager::openEditorWithContents(const Id &editorId,
         return 0;
     }
 
-    if (!edt->createNew(contents)) {
+    if (!edt->document()->setContents(contents)) {
         QApplication::restoreOverrideCursor();
         delete edt;
         edt = 0;
diff --git a/src/plugins/coreplugin/editormanager/editormanager.h b/src/plugins/coreplugin/editormanager/editormanager.h
index 9836d565631e1162c13f8325ba794139188cd3d7..ad7a091821e83a94d2a82a2abaf7cb24093c24f3 100644
--- a/src/plugins/coreplugin/editormanager/editormanager.h
+++ b/src/plugins/coreplugin/editormanager/editormanager.h
@@ -115,7 +115,7 @@ public:
                                  const Id &editorId = Id(), OpenEditorFlags flags = 0,
                                  bool *newEditor = 0);
     static IEditor *openEditorWithContents(const Id &editorId,
-        QString *titlePattern = 0, const QString &contents = QString());
+        QString *titlePattern = 0, const QByteArray &contents = QByteArray());
 
     static bool openExternalEditor(const QString &fileName, const Id &editorId);
 
diff --git a/src/plugins/coreplugin/editormanager/ieditor.h b/src/plugins/coreplugin/editormanager/ieditor.h
index ca36b092ba1b6b47b2b4a907a69d06e471c4b577..af9252321733b74934e9b47dab1b226d7b87375b 100644
--- a/src/plugins/coreplugin/editormanager/ieditor.h
+++ b/src/plugins/coreplugin/editormanager/ieditor.h
@@ -47,7 +47,6 @@ public:
     IEditor(QObject *parent = 0) : IContext(parent) {}
     virtual ~IEditor() {}
 
-    virtual bool createNew(const QString &contents = QString()) = 0;
     virtual bool open(QString *errorString, const QString &fileName, const QString &realFileName) = 0;
     virtual IDocument *document() = 0;
     virtual Core::Id id() const = 0;
diff --git a/src/plugins/coreplugin/idocument.cpp b/src/plugins/coreplugin/idocument.cpp
index 9b4ce965b71446bd978be4f5a6b3cc3d65acc445..3d1f9e82dca46e2fbf5f80eb4882ba8affaeb758 100644
--- a/src/plugins/coreplugin/idocument.cpp
+++ b/src/plugins/coreplugin/idocument.cpp
@@ -57,6 +57,18 @@ IDocument::~IDocument()
     delete m_infoBar;
 }
 
+/*!
+    Used for example by EditorManager::openEditorWithContents() to set the contents
+    of this document.
+    Returns if setting the contents was successful.
+    The base implementation does nothing and returns false.
+*/
+bool IDocument::setContents(const QByteArray &contents)
+{
+    Q_UNUSED(contents)
+    return false;
+}
+
 IDocument::ReloadBehavior IDocument::reloadBehavior(ChangeTrigger state, ChangeType type) const
 {
     if (type == TypePermissions)
diff --git a/src/plugins/coreplugin/idocument.h b/src/plugins/coreplugin/idocument.h
index d257626a17c1e69028f636cb03601c768fd3092c..3178268389882d3d21abfd901f5686e035feec6d 100644
--- a/src/plugins/coreplugin/idocument.h
+++ b/src/plugins/coreplugin/idocument.h
@@ -82,6 +82,8 @@ public:
     virtual ~IDocument();
 
     virtual bool save(QString *errorString, const QString &fileName = QString(), bool autoSave = false) = 0;
+    virtual bool setContents(const QByteArray &contents);
+
     QString filePath() const { return m_filePath; }
     virtual void setFilePath(const QString &filePath);
     QString displayName() const;
diff --git a/src/plugins/cvs/cvsplugin.cpp b/src/plugins/cvs/cvsplugin.cpp
index 75e49af81f05e8e25461a421d1f35796ee097395..d29efd5af6b8fb2bd581c8e123d9c45861d981f9 100644
--- a/src/plugins/cvs/cvsplugin.cpp
+++ b/src/plugins/cvs/cvsplugin.cpp
@@ -591,7 +591,7 @@ void CvsPlugin::cvsDiff(const CvsDiffParameters &p)
     // Show in the same editor if diff has been executed before
     const QString tag = VcsBaseEditorWidget::editorTag(DiffOutput, p.workingDir, p.files);
     if (IEditor *existingEditor = VcsBaseEditorWidget::locateEditorByTag(tag)) {
-        existingEditor->createNew(output);
+        existingEditor->document()->setContents(output.toUtf8());
         EditorManager::activateEditor(existingEditor);
         setDiffBaseDirectory(existingEditor, p.workingDir);
         return;
@@ -859,7 +859,7 @@ void CvsPlugin::filelog(const QString &workingDir,
     // the common usage pattern of continuously changing and diffing a file
     const QString tag = VcsBaseEditorWidget::editorTag(LogOutput, workingDir, files);
     if (Core::IEditor *editor = VcsBaseEditorWidget::locateEditorByTag(tag)) {
-        editor->createNew(response.stdOut);
+        editor->document()->setContents(response.stdOut.toUtf8());
         Core::EditorManager::activateEditor(editor);
     } else {
         const QString title = QString::fromLatin1("cvs log %1").arg(id);
@@ -1001,7 +1001,7 @@ void CvsPlugin::annotate(const QString &workingDir, const QString &file,
 
     const QString tag = VcsBaseEditorWidget::editorTag(AnnotateOutput, workingDir, QStringList(file), revision);
     if (IEditor *editor = VcsBaseEditorWidget::locateEditorByTag(tag)) {
-        editor->createNew(response.stdOut);
+        editor->document()->setContents(response.stdOut.toUtf8());
         VcsBaseEditorWidget::gotoLineOfEditor(editor, lineNumber);
         EditorManager::activateEditor(editor);
     } else {
@@ -1197,7 +1197,7 @@ bool CvsPlugin::describe(const QString &repositoryPath,
     // the common usage pattern of continuously changing and diffing a file
     const QString commitId = entries.front().revisions.front().commitId;
     if (IEditor *editor = VcsBaseEditorWidget::locateEditorByTag(commitId)) {
-        editor->createNew(output);
+        editor->document()->setContents(output.toUtf8());
         EditorManager::activateEditor(editor);
         setDiffBaseDirectory(editor, repositoryPath);
     } else {
@@ -1270,7 +1270,7 @@ IEditor *CvsPlugin::showOutputInEditor(const QString& title, const QString &outp
         qDebug() << "CVSPlugin::showOutputInEditor" << title << id.name()
                  <<  "source=" << source << "Size= " << output.size() <<  " Type=" << editorType << debugCodec(codec);
     QString s = title;
-    IEditor *editor = EditorManager::openEditorWithContents(id, &s, output);
+    IEditor *editor = EditorManager::openEditorWithContents(id, &s, output.toUtf8());
     connect(editor, SIGNAL(annotateRevisionRequested(QString,QString,int)),
             this, SLOT(vcsAnnotate(QString,QString,int)));
     CvsEditor *e = qobject_cast<CvsEditor*>(editor->widget());
diff --git a/src/plugins/debugger/debuggerplugin.cpp b/src/plugins/debugger/debuggerplugin.cpp
index f31de7d97748d0018694ac799abed8bdded59b6e..2de263e2027fef4640233ef7b051b67c7dc47438 100644
--- a/src/plugins/debugger/debuggerplugin.cpp
+++ b/src/plugins/debugger/debuggerplugin.cpp
@@ -2530,7 +2530,7 @@ void DebuggerPluginPrivate::openTextEditor(const QString &titlePattern0,
         return;
     QString titlePattern = titlePattern0;
     IEditor *editor = EditorManager::openEditorWithContents(
-        CC::K_DEFAULT_TEXT_EDITOR_ID, &titlePattern, contents);
+        CC::K_DEFAULT_TEXT_EDITOR_ID, &titlePattern, contents.toUtf8());
     QTC_ASSERT(editor, return);
     EditorManager::activateEditor(editor, EditorManager::IgnoreNavigationHistory);
 }
diff --git a/src/plugins/debugger/sourceagent.cpp b/src/plugins/debugger/sourceagent.cpp
index daa966204a70de2be87876662837cd7618df0655..fcf4b4ca59abaa6570e6f1f7fe71b3652479b979 100644
--- a/src/plugins/debugger/sourceagent.cpp
+++ b/src/plugins/debugger/sourceagent.cpp
@@ -115,7 +115,7 @@ void SourceAgent::setContent(const QString &filePath, const QString &content)
         d->editor = qobject_cast<ITextEditor *>(
             EditorManager::openEditorWithContents(
                 CppEditor::Constants::CPPEDITOR_ID,
-                &titlePattern, content));
+                &titlePattern, content.toUtf8()));
         QTC_ASSERT(d->editor, return);
         d->editor->document()->setProperty(Debugger::Constants::OPENED_BY_DEBUGGER, true);
 
diff --git a/src/plugins/designer/formwindoweditor.cpp b/src/plugins/designer/formwindoweditor.cpp
index 60c83dd585b79724adf82b7a666426deffafd997..dd6f24aed652de4e1dd2c16f16ee882bc3d518e8 100644
--- a/src/plugins/designer/formwindoweditor.cpp
+++ b/src/plugins/designer/formwindoweditor.cpp
@@ -38,16 +38,10 @@
 
 #include <utils/qtcassert.h>
 
-#if QT_VERSION >= 0x050000
-#    include <QDesignerFormWindowInterface>
-#    include <QBuffer>
-#else
-#    include "qt_private/formwindowbase_p.h"
-#endif
-
+#include <QBuffer>
 #include <QDebug>
+#include <QDesignerFormWindowInterface>
 #include <QFileInfo>
-#include <QApplication>
 
 namespace Designer {
 
@@ -74,47 +68,6 @@ FormWindowEditor::~FormWindowEditor()
     delete d;
 }
 
-bool FormWindowEditor::createNew(const QString &contents)
-{
-    if (Designer::Constants::Internal::debug)
-        qDebug() << "FormWindowEditor::createNew" << contents.size();
-
-    syncXmlEditor(QString());
-
-    QDesignerFormWindowInterface *form = d->m_widget->formWindowFile()->formWindow();
-    QTC_ASSERT(form, return false);
-
-    if (contents.isEmpty())
-        return false;
-
-    // If we have an override cursor, reset it over Designer loading,
-    // should it pop up messages about missing resources or such.
-    const bool hasOverrideCursor = QApplication::overrideCursor();
-    QCursor overrideCursor;
-    if (hasOverrideCursor) {
-        overrideCursor = QCursor(*QApplication::overrideCursor());
-        QApplication::restoreOverrideCursor();
-    }
-
-#if QT_VERSION >= 0x050000
-    const bool success = form->setContents(contents);
-#else
-    form->setContents(contents);
-    const bool success = form->mainContainer() != 0;
-#endif
-
-    if (hasOverrideCursor)
-        QApplication::setOverrideCursor(overrideCursor);
-
-    if (!success)
-        return false;
-
-    syncXmlEditor(contents);
-    d->m_widget->formWindowFile()->setFilePath(QString());
-    d->m_widget->formWindowFile()->setShouldAutoSave(false);
-    return true;
-}
-
 void FormWindowEditor::slotOpen(QString *errorString, const QString &fileName)
 {
     open(errorString, fileName, fileName);
@@ -152,7 +105,7 @@ bool FormWindowEditor::open(QString *errorString, const QString &fileName, const
         return false;
 #endif
     form->setDirty(fileName != realFileName);
-    syncXmlEditor(contents);
+    d->m_widget->formWindowFile()->syncXmlFromFormWindow();
 
     d->m_widget->formWindowFile()->setFilePath(absfileName);
     d->m_widget->formWindowFile()->setShouldAutoSave(false);
@@ -167,12 +120,7 @@ void FormWindowEditor::syncXmlEditor()
 {
     if (Designer::Constants::Internal::debug)
         qDebug() << "FormWindowEditor::syncXmlEditor" << d->m_widget->formWindowFile()->filePath();
-    syncXmlEditor(contents());
-}
-
-void FormWindowEditor::syncXmlEditor(const QString &contents)
-{
-    editorWidget()->document()->setPlainText(contents);
+    d->m_widget->formWindowFile()->syncXmlFromFormWindow();
 }
 
 Core::Id FormWindowEditor::id() const
@@ -187,17 +135,7 @@ QWidget *FormWindowEditor::toolBar()
 
 QString FormWindowEditor::contents() const
 {
-#if QT_VERSION >= 0x050000    // TODO: No warnings about spacers here
-    const QDesignerFormWindowInterface *fw = d->m_widget->formWindowFile()->formWindow();
-    QTC_ASSERT(fw, return QString());
-    return fw->contents();
-#else
-    // No warnings about spacers here
-    const qdesigner_internal::FormWindowBase *fw =
-            qobject_cast<const qdesigner_internal::FormWindowBase *>(d->m_widget->formWindowFile()->formWindow());
-    QTC_ASSERT(fw, return QString());
-    return fw->fileContents();
-#endif
+    return d->m_widget->formWindowFile()->formWindowContents();
 }
 
 bool FormWindowEditor::isDesignModePreferred() const
diff --git a/src/plugins/designer/formwindoweditor.h b/src/plugins/designer/formwindoweditor.h
index 8188bcb736fb7eb5db8ae1b89a039990bf6d10d0..a2f0549d869dcf5f309c2276f7a0d062571929b7 100644
--- a/src/plugins/designer/formwindoweditor.h
+++ b/src/plugins/designer/formwindoweditor.h
@@ -66,7 +66,6 @@ public:
     virtual ~FormWindowEditor();
 
     // IEditor
-    virtual bool createNew(const QString &contents = QString());
     virtual bool open(QString *errorString, const QString &fileName, const QString &realFileName);
     virtual Core::Id id() const;
 
@@ -84,8 +83,6 @@ private slots:
     void slotOpen(QString *errorString, const QString &fileName);
 
 private:
-    void syncXmlEditor(const QString &contents);
-
     FormWindowEditorPrivate *d;
 };
 
diff --git a/src/plugins/designer/formwindowfile.cpp b/src/plugins/designer/formwindowfile.cpp
index 3a91695dfdd2ba7d23f75fb06811127a74e795e5..45a966569fda5e72c22024b7381c2a4e47ee7d11 100644
--- a/src/plugins/designer/formwindowfile.cpp
+++ b/src/plugins/designer/formwindowfile.cpp
@@ -32,13 +32,16 @@
 
 #include <utils/qtcassert.h>
 
+#include <QApplication>
 #include <QDesignerFormWindowInterface>
 #include <QDesignerFormWindowManagerInterface>
 #include <QDesignerFormEditorInterface>
 #if QT_VERSION < 0x050000
 #    include "qt_private/qsimpleresource_p.h"
+#    include "qt_private/formwindowbase_p.h"
 #endif
 
+#include <QTextDocument>
 #include <QUndoStack>
 
 #include <QFileInfo>
@@ -103,6 +106,45 @@ bool FormWindowFile::save(QString *errorString, const QString &name, bool autoSa
     return true;
 }
 
+bool FormWindowFile::setContents(const QByteArray &contents)
+{
+    if (Designer::Constants::Internal::debug)
+        qDebug() << Q_FUNC_INFO << contents.size();
+
+    document()->setPlainText(QString());
+
+    QTC_ASSERT(m_formWindow, return false);
+
+    if (contents.isEmpty())
+        return false;
+
+    // If we have an override cursor, reset it over Designer loading,
+    // should it pop up messages about missing resources or such.
+    const bool hasOverrideCursor = QApplication::overrideCursor();
+    QCursor overrideCursor;
+    if (hasOverrideCursor) {
+        overrideCursor = QCursor(*QApplication::overrideCursor());
+        QApplication::restoreOverrideCursor();
+    }
+
+#if QT_VERSION >= 0x050000
+    const bool success = m_formWindow->setContents(QString::fromUtf8(contents));
+#else
+    m_formWindow->setContents(QString::fromUtf8(contents));
+    const bool success = m_formWindow->mainContainer() != 0;
+#endif
+
+    if (hasOverrideCursor)
+        QApplication::setOverrideCursor(overrideCursor);
+
+    if (!success)
+        return false;
+
+    syncXmlFromFormWindow();
+    setShouldAutoSave(false);
+    return true;
+}
+
 void FormWindowFile::setFilePath(const QString &newName)
 {
     m_formWindow->setFileName(newName);
@@ -184,6 +226,25 @@ QDesignerFormWindowInterface *FormWindowFile::formWindow() const
     return m_formWindow;
 }
 
+void FormWindowFile::syncXmlFromFormWindow()
+{
+    document()->setPlainText(formWindowContents());
+}
+
+QString FormWindowFile::formWindowContents() const
+{
+#if QT_VERSION >= 0x050000    // TODO: No warnings about spacers here
+    QTC_ASSERT(m_formWindow, return QString());
+    return m_formWindow->contents();
+#else
+    // No warnings about spacers here
+    const qdesigner_internal::FormWindowBase *fw =
+            qobject_cast<const qdesigner_internal::FormWindowBase *>(m_formWindow);
+    QTC_ASSERT(fw, return QString());
+    return fw->fileContents();
+#endif
+}
+
 void FormWindowFile::slotFormWindowRemoved(QDesignerFormWindowInterface *w)
 {
     // Release formwindow as soon as the FormWindowManager removes
diff --git a/src/plugins/designer/formwindowfile.h b/src/plugins/designer/formwindowfile.h
index 351e1357e1456d9b9750d6294b29fc4008e40c11..6edbc37418e9a728c2c3466d44c6ed45dc93f584 100644
--- a/src/plugins/designer/formwindowfile.h
+++ b/src/plugins/designer/formwindowfile.h
@@ -51,14 +51,15 @@ public:
     ~FormWindowFile() { }
 
     // IDocument
-    virtual bool save(QString *errorString, const QString &fileName, bool autoSave);
-    virtual bool shouldAutoSave() const;
-    virtual bool isModified() const;
-    virtual bool isSaveAsAllowed() const;
+    bool save(QString *errorString, const QString &fileName, bool autoSave);
+    bool setContents(const QByteArray &contents);
+    bool shouldAutoSave() const;
+    bool isModified() const;
+    bool isSaveAsAllowed() const;
     bool reload(QString *errorString, ReloadFlag flag, ChangeType type);
-    virtual QString defaultPath() const;
-    virtual QString suggestedFileName() const;
-    virtual QString mimeType() const;
+    QString defaultPath() const;
+    QString suggestedFileName() const;
+    QString mimeType() const;
 
     // Internal
     void setSuggestedFileName(const QString &fileName);
@@ -66,6 +67,8 @@ public:
     bool writeFile(const QString &fileName, QString *errorString) const;
 
     QDesignerFormWindowInterface *formWindow() const;
+    void syncXmlFromFormWindow();
+    QString formWindowContents() const;
 
 signals:
     // Internal
diff --git a/src/plugins/diffeditor/diffeditor.cpp b/src/plugins/diffeditor/diffeditor.cpp
index d51c44997fba3eda8818a375ec75cdfea65a6229..4d06370d8717a7d6a3a11badd7ee3f8d8bc6f8b3 100644
--- a/src/plugins/diffeditor/diffeditor.cpp
+++ b/src/plugins/diffeditor/diffeditor.cpp
@@ -67,12 +67,6 @@ DiffEditor::~DiffEditor()
         delete m_widget;
 }
 
-bool DiffEditor::createNew(const QString &contents)
-{
-    Q_UNUSED(contents)
-    return true;
-}
-
 bool DiffEditor::open(QString *errorString, const QString &fileName, const QString &realFileName)
 {
     Q_UNUSED(errorString)
diff --git a/src/plugins/diffeditor/diffeditor.h b/src/plugins/diffeditor/diffeditor.h
index c8f49444077b803dafacaab8713dee9fc355d316..0b469b4c79454f9d32057511e02a6e32456e11b2 100644
--- a/src/plugins/diffeditor/diffeditor.h
+++ b/src/plugins/diffeditor/diffeditor.h
@@ -60,7 +60,6 @@ public:
     void clear(const QString &message);
 
     // Core::IEditor
-    bool createNew(const QString &contents);
     bool open(QString *errorString, const QString &fileName, const QString &realFileName);
     Core::IDocument *document();
     Core::Id id() const;
diff --git a/src/plugins/diffeditor/diffeditorfile.cpp b/src/plugins/diffeditor/diffeditorfile.cpp
index 7a52f708426eb79a595dba892f55cafffa29386b..6e9bc622ca4d546a510beb8cd129b873c14eb92d 100644
--- a/src/plugins/diffeditor/diffeditorfile.cpp
+++ b/src/plugins/diffeditor/diffeditorfile.cpp
@@ -46,6 +46,12 @@ DiffEditorFile::DiffEditorFile(const QString &mimeType, QObject *parent) :
     setTemporary(true);
 }
 
+bool DiffEditorFile::setContents(const QByteArray &contents)
+{
+    Q_UNUSED(contents);
+    return false;
+}
+
 void DiffEditorFile::setModified(bool modified)
 {
     if (m_modified == modified)
diff --git a/src/plugins/diffeditor/diffeditorfile.h b/src/plugins/diffeditor/diffeditorfile.h
index 081253e6f9ec2faa3a37dd7331df2163769902eb..261701c2bdd75b4d729dd7be26d85e813b2a1fdf 100644
--- a/src/plugins/diffeditor/diffeditorfile.h
+++ b/src/plugins/diffeditor/diffeditorfile.h
@@ -48,6 +48,7 @@ public:
     explicit DiffEditorFile(const QString &mimeType,
                               QObject *parent = 0);
 
+    bool setContents(const QByteArray &contents);
     QString defaultPath() const { return QString(); }
     QString suggestedFileName() const { return QString(); }
 
diff --git a/src/plugins/diffeditor/diffeditorplugin.cpp b/src/plugins/diffeditor/diffeditorplugin.cpp
index 784e0810e69ac4c10293bc9a3b5ac3684316acc8..191c6a88c168bf1639957f3aea54093b040201f3 100644
--- a/src/plugins/diffeditor/diffeditorplugin.cpp
+++ b/src/plugins/diffeditor/diffeditorplugin.cpp
@@ -103,7 +103,7 @@ void DiffEditorPlugin::diff()
     //: Editor title
     QString title = tr("Diff \"%1\", \"%2\"").arg(fileName1).arg(fileName2);
     DiffEditor *editor = qobject_cast<DiffEditor *>
-            (Core::EditorManager::openEditorWithContents(editorId, &title, QString()));
+            (Core::EditorManager::openEditorWithContents(editorId, &title));
 
     if (!editor)
         return;
diff --git a/src/plugins/diffeditor/diffshoweditor.h b/src/plugins/diffeditor/diffshoweditor.h
index fedd94fc5ec25c9ce52296b91266e952a4a18280..cace93f73a4c8dc7c5ceea6af1871d2f791cbf7e 100644
--- a/src/plugins/diffeditor/diffshoweditor.h
+++ b/src/plugins/diffeditor/diffshoweditor.h
@@ -42,10 +42,6 @@ QT_END_NAMESPACE
 
 namespace DiffEditor {
 
-namespace Internal {
-class DiffEditorFile;
-}
-
 class DIFFEDITOR_EXPORT DiffShowEditor : public DiffEditor
 {
     Q_OBJECT
diff --git a/src/plugins/git/gitclient.cpp b/src/plugins/git/gitclient.cpp
index 84598486073ad27271cde84f022154a85c08050b..9c036cca79e2e722cc146a1aab88867df70d5ba1 100644
--- a/src/plugins/git/gitclient.cpp
+++ b/src/plugins/git/gitclient.cpp
@@ -867,7 +867,7 @@ VcsBase::VcsBaseEditorWidget *GitClient::findExistingVCSEditor(const char *regis
 
     // Exists already
     Core::EditorManager::activateEditor(outputEditor);
-    outputEditor->createNew(m_msgWait);
+    outputEditor->document()->setContents(m_msgWait.toUtf8());
     rc = VcsBase::VcsBaseEditorWidget::getVcsBaseEditor(outputEditor);
 
     return rc;
@@ -880,14 +880,14 @@ DiffEditor::DiffEditor *GitClient::findExistingOrOpenNewDiffEditor(const char *r
     if (outputEditor) {
         // Exists already
         Core::EditorManager::activateEditor(outputEditor);
-        outputEditor->createNew(m_msgWait);
+        outputEditor->document()->setContents(m_msgWait.toUtf8());
     }
 
     DiffEditor::DiffEditor *editor = qobject_cast<DiffEditor::DiffEditor *>(outputEditor);
     if (!editor) {
         QString title = titlePattern;
         editor = qobject_cast<DiffEditor::DiffEditor *>(
-                    Core::EditorManager::openEditorWithContents(editorId, &title, m_msgWait));
+                    Core::EditorManager::openEditorWithContents(editorId, &title, m_msgWait.toUtf8()));
         editor->document()->setProperty(registerDynamicProperty, dynamicPropertyValue);
         Core::EditorManager::activateEditor(editor);
     }
@@ -913,7 +913,8 @@ VcsBase::VcsBaseEditorWidget *GitClient::createVcsEditor(const Core::Id &id,
     QTC_CHECK(!findExistingVCSEditor(registerDynamicProperty, dynamicPropertyValue));
 
     // Create new, set wait message, set up with source and codec
-    Core::IEditor *outputEditor = Core::EditorManager::openEditorWithContents(id, &title, m_msgWait);
+    Core::IEditor *outputEditor = Core::EditorManager::openEditorWithContents(id, &title,
+                                                                              m_msgWait.toUtf8());
     outputEditor->document()->setProperty(registerDynamicProperty, dynamicPropertyValue);
     rc = VcsBase::VcsBaseEditorWidget::getVcsBaseEditor(outputEditor);
     connect(rc, SIGNAL(annotateRevisionRequested(QString,QString,int)),
diff --git a/src/plugins/imageviewer/imageviewer.cpp b/src/plugins/imageviewer/imageviewer.cpp
index 3604c1195a686268ab8b491dcf337ead22445857..e214eade6d401ca743c4366222f440cb7bb31034 100644
--- a/src/plugins/imageviewer/imageviewer.cpp
+++ b/src/plugins/imageviewer/imageviewer.cpp
@@ -119,12 +119,6 @@ ImageViewer::~ImageViewer()
     delete d;
 }
 
-bool ImageViewer::createNew(const QString &contents)
-{
-    Q_UNUSED(contents)
-    return false;
-}
-
 bool ImageViewer::open(QString *errorString, const QString &fileName, const QString &realFileName)
 {
     if (!d->imageView->openFile(realFileName)) {
diff --git a/src/plugins/imageviewer/imageviewer.h b/src/plugins/imageviewer/imageviewer.h
index 4ad5cbc853596bc1d74354ce91a2966315027ec9..2890d45a325e2484e2a9c926c3d61c3c335554f2 100644
--- a/src/plugins/imageviewer/imageviewer.h
+++ b/src/plugins/imageviewer/imageviewer.h
@@ -54,7 +54,6 @@ public:
     explicit ImageViewer(QWidget *parent = 0);
     ~ImageViewer();
 
-    bool createNew(const QString &contents = QString());
     bool open(QString *errorString, const QString &fileName, const QString &realFileName);
     Core::IDocument *document();
     Core::Id id() const;
diff --git a/src/plugins/imageviewer/imageviewerfile.cpp b/src/plugins/imageviewer/imageviewerfile.cpp
index e04539a59c76efb8876f66f3f33db92b802944e3..a7c96e0ceb576dc3a124cb863c2d12eb03e3bb44 100644
--- a/src/plugins/imageviewer/imageviewerfile.cpp
+++ b/src/plugins/imageviewer/imageviewerfile.cpp
@@ -72,6 +72,12 @@ bool ImageViewerFile::save(QString *errorString, const QString &fileName, bool a
     return false;
 }
 
+bool ImageViewerFile::setContents(const QByteArray &contents)
+{
+    Q_UNUSED(contents);
+    return false;
+}
+
 QString ImageViewerFile::defaultPath() const
 {
     return QString();
diff --git a/src/plugins/imageviewer/imageviewerfile.h b/src/plugins/imageviewer/imageviewerfile.h
index 448e9abdc4f38128b41b189060e658896563b894..d042e8ab1f3526cd3fb9c100afe9bc36ee5a41e2 100644
--- a/src/plugins/imageviewer/imageviewerfile.h
+++ b/src/plugins/imageviewer/imageviewerfile.h
@@ -46,6 +46,7 @@ public:
     explicit ImageViewerFile(ImageViewer *parent = 0);
 
     bool save(QString *errorString, const QString &fileName, bool autoSave);
+    bool setContents(const QByteArray &contents);
 
     QString defaultPath() const;
     QString suggestedFileName() const;
diff --git a/src/plugins/perforce/perforceplugin.cpp b/src/plugins/perforce/perforceplugin.cpp
index e7787c8f7a561d0524e5fb62262d4c068476bb42..a478661305abba6bfe1b737f8b89061096180392 100644
--- a/src/plugins/perforce/perforceplugin.cpp
+++ b/src/plugins/perforce/perforceplugin.cpp
@@ -1166,7 +1166,7 @@ Core::IEditor *PerforcePlugin::showOutputInEditor(const QString &title, const QS
         qDebug() << "PerforcePlugin::showOutputInEditor" << title << id.name()
                  <<  "Size= " << output.size() <<  " Type=" << editorType << debugCodec(codec);
     QString s = title;
-    Core::IEditor *editor = Core::EditorManager::openEditorWithContents(id, &s, output);
+    Core::IEditor *editor = Core::EditorManager::openEditorWithContents(id, &s, output.toUtf8());
     connect(editor, SIGNAL(annotateRevisionRequested(QString,QString,int)),
             this, SLOT(vcsAnnotate(QString,QString,int)));
     PerforceEditor *e = qobject_cast<PerforceEditor*>(editor->widget());
@@ -1260,7 +1260,7 @@ void PerforcePlugin::p4Diff(const PerforceDiffParameters &p)
         return;
 
     if (existingEditor) {
-        existingEditor->createNew(result.stdOut);
+        existingEditor->document()->setContents(result.stdOut.toUtf8());
         Core::EditorManager::activateEditor(existingEditor);
         return;
     }
diff --git a/src/plugins/perforce/perforcesubmiteditor.cpp b/src/plugins/perforce/perforcesubmiteditor.cpp
index 3ae22eb738b9f9521dce24fdeb7666c68a113b6d..ef910427ba825457866592ac6f7cd57c49f82fa7 100644
--- a/src/plugins/perforce/perforcesubmiteditor.cpp
+++ b/src/plugins/perforce/perforcesubmiteditor.cpp
@@ -71,11 +71,11 @@ QByteArray PerforceSubmitEditor::fileContents() const
     return text.toLocal8Bit();
 }
 
-bool PerforceSubmitEditor::setFileContents(const QString &contents)
+bool PerforceSubmitEditor::setFileContents(const QByteArray &contents)
 {
     if (Perforce::Constants::debug)
         qDebug() << Q_FUNC_INFO << contents;
-    if (!parseText(contents))
+    if (!parseText(QString::fromUtf8(contents)))
         return false;
     updateFields();
     return true;
diff --git a/src/plugins/perforce/perforcesubmiteditor.h b/src/plugins/perforce/perforcesubmiteditor.h
index dc3447712a537a6120db45af9676e99c43842580..9baf78ac88ce0aff5c6ccb2cf27d94d613471d23 100644
--- a/src/plugins/perforce/perforcesubmiteditor.h
+++ b/src/plugins/perforce/perforcesubmiteditor.h
@@ -67,7 +67,7 @@ public:
 
 protected:
     QByteArray fileContents() const;
-    bool setFileContents(const QString &contents);
+    bool setFileContents(const QByteArray &contents);
 
 private:
     inline PerforceSubmitEditorWidget *submitEditorWidget();
diff --git a/src/plugins/qnx/bardescriptoreditor.cpp b/src/plugins/qnx/bardescriptoreditor.cpp
index df9d195d28337f907bf3e96ef88b1133f02f13b2..b623680e6fe717833d72117f8f1119a7cdbcc61c 100644
--- a/src/plugins/qnx/bardescriptoreditor.cpp
+++ b/src/plugins/qnx/bardescriptoreditor.cpp
@@ -82,12 +82,6 @@ BarDescriptorEditor::BarDescriptorEditor(BarDescriptorEditorWidget *editorWidget
     generalAction->setChecked(true);
 }
 
-bool BarDescriptorEditor::createNew(const QString &contents)
-{
-    Q_UNUSED(contents);
-    return false;
-}
-
 bool BarDescriptorEditor::open(QString *errorString, const QString &fileName, const QString &realFileName)
 {
     QTC_ASSERT(fileName == realFileName, return false);
diff --git a/src/plugins/qnx/bardescriptoreditor.h b/src/plugins/qnx/bardescriptoreditor.h
index 707cf5540cf23aab62fb1288001d20074d4c9cb1..1c3c47737a7a36ff3dd42e9e1219b4031fb963b4 100644
--- a/src/plugins/qnx/bardescriptoreditor.h
+++ b/src/plugins/qnx/bardescriptoreditor.h
@@ -63,7 +63,6 @@ public:
 
     explicit BarDescriptorEditor(BarDescriptorEditorWidget *editorWidget);
 
-    bool createNew(const QString &contents = QString());
     bool open(QString *errorString, const QString &fileName, const QString &realFileName);
     Core::IDocument *document();
     Core::Id id() const;
diff --git a/src/plugins/resourceeditor/resourceeditorw.cpp b/src/plugins/resourceeditor/resourceeditorw.cpp
index d6b343aae1c05ded4930130fd359f5bd4eb3e998..652c2a71812a3e71f264d66f633e63f4b6a069f7 100644
--- a/src/plugins/resourceeditor/resourceeditorw.cpp
+++ b/src/plugins/resourceeditor/resourceeditorw.cpp
@@ -134,21 +134,6 @@ ResourceEditorW::~ResourceEditorW()
     delete m_toolBar;
 }
 
-bool ResourceEditorW::createNew(const QString &contents)
-{
-    Utils::TempFileSaver saver;
-    saver.write(contents.toUtf8());
-    if (!saver.finalize(Core::ICore::mainWindow()))
-        return false;
-
-    const bool rc = m_resourceEditor->load(saver.fileName());
-    m_resourceDocument->setFilePath(QString());
-    m_shouldAutoSave = false;
-    if (debugResourceEditorW)
-        qDebug() <<  "ResourceEditorW::createNew: " << contents << " (" << saver.fileName() << ") returns " << rc;
-    return rc;
-}
-
 bool ResourceEditorW::open(QString *errorString, const QString &fileName, const QString &realFileName)
 {
     if (debugResourceEditorW)
@@ -206,6 +191,20 @@ bool ResourceEditorDocument::save(QString *errorString, const QString &name, boo
     return true;
 }
 
+bool ResourceEditorDocument::setContents(const QByteArray &contents)
+{
+    Utils::TempFileSaver saver;
+    saver.write(contents);
+    if (!saver.finalize(Core::ICore::mainWindow()))
+        return false;
+
+    const bool rc = m_parent->m_resourceEditor->load(saver.fileName());
+    m_parent->m_shouldAutoSave = false;
+    if (debugResourceEditorW)
+        qDebug() <<  "ResourceEditorW::createNew: " << contents << " (" << saver.fileName() << ") returns " << rc;
+    return rc;
+}
+
 void ResourceEditorDocument::setFilePath(const QString &newName)
 {
     if (newName != m_parent->m_resourceEditor->fileName())
diff --git a/src/plugins/resourceeditor/resourceeditorw.h b/src/plugins/resourceeditor/resourceeditorw.h
index 5a3e222005950eec34d4c26a0c04b18b24d45ea7..5c1abbda2bd4b1702be93466365e8f5d14fdc504 100644
--- a/src/plugins/resourceeditor/resourceeditorw.h
+++ b/src/plugins/resourceeditor/resourceeditorw.h
@@ -55,6 +55,7 @@ public:
 
     //IDocument
     bool save(QString *errorString, const QString &fileName, bool autoSave);
+    bool setContents(const QByteArray &contents);
     bool shouldAutoSave() const;
     bool isModified() const;
     bool isSaveAsAllowed() const;
@@ -85,7 +86,6 @@ public:
     ~ResourceEditorW();
 
     // IEditor
-    bool createNew(const QString &contents);
     bool open(QString *errorString, const QString &fileName, const QString &realFileName);
     Core::IDocument *document() { return m_resourceDocument; }
     Core::Id id() const;
diff --git a/src/plugins/subversion/subversionplugin.cpp b/src/plugins/subversion/subversionplugin.cpp
index 96b9f8a8759aca6f0403539d5b89cc7767f0edee..7cdca762d366b2a4649a997e0f6c99348fa3c56f 100644
--- a/src/plugins/subversion/subversionplugin.cpp
+++ b/src/plugins/subversion/subversionplugin.cpp
@@ -588,7 +588,7 @@ void SubversionPlugin::svnDiff(const Subversion::Internal::SubversionDiffParamet
     const QString tag = VcsBase::VcsBaseEditorWidget::editorTag(VcsBase::DiffOutput, p.workingDir, p.files);
     // Show in the same editor if diff has been executed before
     if (Core::IEditor *existingEditor = VcsBase::VcsBaseEditorWidget::locateEditorByTag(tag)) {
-        existingEditor->createNew(response.stdOut);
+        existingEditor->document()->setContents(response.stdOut.toUtf8());
         Core::EditorManager::activateEditor(existingEditor);
         setDiffBaseDirectory(existingEditor, p.workingDir);
         return;
@@ -899,7 +899,7 @@ void SubversionPlugin::filelog(const QString &workingDir,
     const QString id = VcsBase::VcsBaseEditorWidget::getTitleId(workingDir, files);
     const QString tag = VcsBase::VcsBaseEditorWidget::editorTag(VcsBase::LogOutput, workingDir, files);
     if (Core::IEditor *editor = VcsBase::VcsBaseEditorWidget::locateEditorByTag(tag)) {
-        editor->createNew(response.stdOut);
+        editor->document()->setContents(response.stdOut.toUtf8());
         Core::EditorManager::activateEditor(editor);
     } else {
         const QString title = QString::fromLatin1("svn log %1").arg(id);
@@ -976,7 +976,7 @@ void SubversionPlugin::vcsAnnotate(const QString &workingDir, const QString &fil
     const QString id = VcsBase::VcsBaseEditorWidget::getTitleId(workingDir, files, revision);
     const QString tag = VcsBase::VcsBaseEditorWidget::editorTag(VcsBase::AnnotateOutput, workingDir, files);
     if (Core::IEditor *editor = VcsBase::VcsBaseEditorWidget::locateEditorByTag(tag)) {
-        editor->createNew(response.stdOut);
+        editor->document()->setContents(response.stdOut.toUtf8());
         VcsBase::VcsBaseEditorWidget::gotoLineOfEditor(editor, lineNumber);
         Core::EditorManager::activateEditor(editor);
     } else {
@@ -1042,7 +1042,7 @@ void SubversionPlugin::describe(const QString &source, const QString &changeNr)
     const QString id = diffArg + source;
     const QString tag = VcsBase::VcsBaseEditorWidget::editorTag(VcsBase::DiffOutput, source, QStringList(), changeNr);
     if (Core::IEditor *editor = VcsBase::VcsBaseEditorWidget::locateEditorByTag(tag)) {
-        editor->createNew(description);
+        editor->document()->setContents(description.toUtf8());
         Core::EditorManager::activateEditor(editor);
     } else {
         const QString title = QString::fromLatin1("svn describe %1#%2").arg(fi.fileName(), changeNr);
@@ -1174,7 +1174,7 @@ Core::IEditor *SubversionPlugin::showOutputInEditor(const QString &title, const
         qDebug() << "SubversionPlugin::showOutputInEditor" << title << id.name()
                  <<  "Size= " << output.size() <<  " Type=" << editorType << debugCodec(codec);
     QString s = title;
-    Core::IEditor *editor = Core::EditorManager::openEditorWithContents(id, &s, output);
+    Core::IEditor *editor = Core::EditorManager::openEditorWithContents(id, &s, output.toUtf8());
     connect(editor, SIGNAL(annotateRevisionRequested(QString,QString,int)),
             this, SLOT(annotateVersion(QString,QString,int)));
     SubversionEditor *e = qobject_cast<SubversionEditor*>(editor->widget());
diff --git a/src/plugins/texteditor/basetextdocument.cpp b/src/plugins/texteditor/basetextdocument.cpp
index d1913986b49c9e9ecde9847268eccc2f3bd77d9c..92fc4581e19aab0b7bd105e64ec6c829a0246bab 100644
--- a/src/plugins/texteditor/basetextdocument.cpp
+++ b/src/plugins/texteditor/basetextdocument.cpp
@@ -294,6 +294,18 @@ bool BaseTextDocument::save(QString *errorString, const QString &saveFileName, b
     return true;
 }
 
+bool BaseTextDocument::setContents(const QByteArray &contents)
+{
+    if (contents.size() > Core::EditorManager::maxTextFileSize()) {
+        document()->setPlainText(BaseTextEditorWidget::msgTextTooLarge(contents.size()));
+        document()->setModified(false);
+        return false;
+    }
+    document()->setPlainText(QString::fromUtf8(contents));
+    document()->setModified(false);
+    return true;
+}
+
 bool BaseTextDocument::shouldAutoSave() const
 {
     return d->m_autoSaveRevision != d->m_document->revision();
diff --git a/src/plugins/texteditor/basetextdocument.h b/src/plugins/texteditor/basetextdocument.h
index 4e9ac1463466d347c95eadcd53a41c01c19ef1ec..a8f8f2ca7af1b587c6b33216c8b2dadbac747ad5 100644
--- a/src/plugins/texteditor/basetextdocument.h
+++ b/src/plugins/texteditor/basetextdocument.h
@@ -75,19 +75,20 @@ public:
     ITextMarkable *documentMarker() const;
 
     // IDocument implementation.
-    virtual bool save(QString *errorString, const QString &fileName, bool autoSave);
-    virtual bool shouldAutoSave() const;
-    virtual bool isFileReadOnly() const;
-    virtual bool isModified() const;
-    virtual bool isSaveAsAllowed() const;
-    virtual void checkPermissions();
+    bool save(QString *errorString, const QString &fileName, bool autoSave);
+    bool setContents(const QByteArray &contents);
+    bool shouldAutoSave() const;
+    bool isFileReadOnly() const;
+    bool isModified() const;
+    bool isSaveAsAllowed() const;
+    void checkPermissions();
     bool reload(QString *errorString, ReloadFlag flag, ChangeType type);
-    virtual QString mimeType() const;
+    QString mimeType() const;
     void setMimeType(const QString &mt);
     void setFilePath(const QString &newName);
 
-    virtual QString defaultPath() const;
-    virtual QString suggestedFileName() const;
+    QString defaultPath() const;
+    QString suggestedFileName() const;
 
     void setDefaultPath(const QString &defaultPath);
     void setSuggestedFileName(const QString &suggestedFileName);
diff --git a/src/plugins/texteditor/basetexteditor.cpp b/src/plugins/texteditor/basetexteditor.cpp
index 46cee5a027c86e042a4064db6a760f4695d4b640..5484db7a443eabf4a8f7a95e36ececc436d39123 100644
--- a/src/plugins/texteditor/basetexteditor.cpp
+++ b/src/plugins/texteditor/basetexteditor.cpp
@@ -539,18 +539,6 @@ QString BaseTextEditorWidget::msgTextTooLarge(quint64 size)
            arg(size >> 20);
 }
 
-bool BaseTextEditorWidget::createNew(const QString &contents)
-{
-    if (contents.size() > Core::EditorManager::maxTextFileSize()) {
-        setPlainText(msgTextTooLarge(contents.size()));
-        document()->setModified(false);
-        return false;
-    }
-    setPlainText(contents);
-    document()->setModified(false);
-    return true;
-}
-
 void BaseTextEditorWidget::updateCannotDecodeInfo()
 {
     setReadOnly(d->m_document->hasDecodingError());
diff --git a/src/plugins/texteditor/basetexteditor.h b/src/plugins/texteditor/basetexteditor.h
index ce8af7725bfbd87ce1034768a853857c4affe8f1..5382f4efc8b6849c79db613a44134621bc831c0f 100644
--- a/src/plugins/texteditor/basetexteditor.h
+++ b/src/plugins/texteditor/basetexteditor.h
@@ -136,7 +136,6 @@ public:
 
     // EditorInterface
     Core::IDocument *editorDocument() const;
-    bool createNew(const QString &contents);
     virtual bool open(QString *errorString, const QString &fileName, const QString &realFileName);
     QByteArray saveState() const;
     bool restoreState(const QByteArray &state);
@@ -243,6 +242,8 @@ public:
                                                     AssistReason assistReason) const;
     QMimeData *duplicateMimeData(const QMimeData *source) const;
 
+    static QString msgTextTooLarge(quint64 size);
+
 public slots:
     virtual void copy();
     virtual void paste();
@@ -352,7 +353,6 @@ protected:
     virtual bool selectionVisible(int blockNumber) const;
     virtual bool replacementVisible(int blockNumber) const;
     virtual QColor replacementPenColor(int blockNumber) const;
-    static QString msgTextTooLarge(quint64 size);
 
 private:
     void maybeSelectLine();
@@ -612,7 +612,6 @@ public:
 
     // IEditor
     Core::IDocument *document() { return m_editorWidget->editorDocument(); }
-    bool createNew(const QString &contents) { return m_editorWidget->createNew(contents); }
     bool open(QString *errorString, const QString &fileName, const QString &realFileName);
 
     QByteArray saveState() const { return m_editorWidget->saveState(); }
diff --git a/src/plugins/vcsbase/submiteditorfile.cpp b/src/plugins/vcsbase/submiteditorfile.cpp
index 473defa443d086656d75200f448190b190b657a8..1d107262d4b67239f11a945b7c739b71ceaad387 100644
--- a/src/plugins/vcsbase/submiteditorfile.cpp
+++ b/src/plugins/vcsbase/submiteditorfile.cpp
@@ -54,6 +54,11 @@ SubmitEditorFile::SubmitEditorFile(const QString &mimeType, VcsBaseSubmitEditor
     setTemporary(true);
 }
 
+bool SubmitEditorFile::setContents(const QByteArray &contents)
+{
+    return m_editor->setFileContents(contents);
+}
+
 void SubmitEditorFile::setModified(bool modified)
 {
     if (m_modified == modified)
diff --git a/src/plugins/vcsbase/submiteditorfile.h b/src/plugins/vcsbase/submiteditorfile.h
index 4b16ff785f14c8acd8bc4c52fe1e30d256394b0e..4623a211d3509ee3693f62821ec6d676b474678c 100644
--- a/src/plugins/vcsbase/submiteditorfile.h
+++ b/src/plugins/vcsbase/submiteditorfile.h
@@ -44,6 +44,7 @@ public:
     explicit SubmitEditorFile(const QString &mimeType,
                               VcsBaseSubmitEditor *parent = 0);
 
+    bool setContents(const QByteArray &contents);
     QString defaultPath() const { return QString(); }
     QString suggestedFileName() const { return QString(); }
 
diff --git a/src/plugins/vcsbase/vcsbaseclient.cpp b/src/plugins/vcsbase/vcsbaseclient.cpp
index e6652842b4b36c5c48dd221c3802bf86db5b12b0..e9f7d7a74cb5a5d8ec5250652084fbf33039bad4 100644
--- a/src/plugins/vcsbase/vcsbaseclient.cpp
+++ b/src/plugins/vcsbase/vcsbaseclient.cpp
@@ -560,11 +560,11 @@ VcsBase::VcsBaseEditorWidget *VcsBaseClient::createVcsEditor(Core::Id kind, QStr
     const QString progressMsg = tr("Working...");
     if (outputEditor) {
         // Exists already
-        outputEditor->createNew(progressMsg);
+        outputEditor->document()->setContents(progressMsg.toUtf8());
         baseEditor = VcsBase::VcsBaseEditorWidget::getVcsBaseEditor(outputEditor);
         QTC_ASSERT(baseEditor, return 0);
     } else {
-        outputEditor = Core::EditorManager::openEditorWithContents(kind, &title, progressMsg);
+        outputEditor = Core::EditorManager::openEditorWithContents(kind, &title, progressMsg.toUtf8());
         outputEditor->document()->setProperty(registerDynamicProperty, dynamicPropertyValue);
         baseEditor = VcsBase::VcsBaseEditorWidget::getVcsBaseEditor(outputEditor);
         connect(baseEditor, SIGNAL(annotateRevisionRequested(QString,QString,int)),
diff --git a/src/plugins/vcsbase/vcsbasesubmiteditor.cpp b/src/plugins/vcsbase/vcsbasesubmiteditor.cpp
index 9f482ba6d32097733a59fc76c60e9bd45d56337c..9ce57a0455485f4aa13bf7934b8ad36dbf632ecc 100644
--- a/src/plugins/vcsbase/vcsbasesubmiteditor.cpp
+++ b/src/plugins/vcsbase/vcsbasesubmiteditor.cpp
@@ -349,12 +349,6 @@ void VcsBaseSubmitEditor::slotDescriptionChanged()
 {
 }
 
-bool VcsBaseSubmitEditor::createNew(const QString &contents)
-{
-    setFileContents(contents);
-    return true;
-}
-
 bool VcsBaseSubmitEditor::open(QString *errorString, const QString &fileName, const QString &realFileName)
 {
     if (fileName.isEmpty())
@@ -365,7 +359,7 @@ bool VcsBaseSubmitEditor::open(QString *errorString, const QString &fileName, co
         return false;
 
     const QString text = QString::fromLocal8Bit(reader.data());
-    if (!createNew(text))
+    if (!setFileContents(text.toUtf8()))
         return false;
 
     d->m_file->setFilePath(QFileInfo(fileName).absoluteFilePath());
@@ -518,9 +512,9 @@ QByteArray VcsBaseSubmitEditor::fileContents() const
     return d->m_widget->descriptionText().toLocal8Bit();
 }
 
-bool VcsBaseSubmitEditor::setFileContents(const QString &contents)
+bool VcsBaseSubmitEditor::setFileContents(const QByteArray &contents)
 {
-    d->m_widget->setDescriptionText(contents);
+    d->m_widget->setDescriptionText(QString::fromUtf8(contents));
     return true;
 }
 
diff --git a/src/plugins/vcsbase/vcsbasesubmiteditor.h b/src/plugins/vcsbase/vcsbasesubmiteditor.h
index 087f2ce98a27eee59512a09ecacc385c06312a12..504629523bbea190b44979d7afedd964a87bdeb7 100644
--- a/src/plugins/vcsbase/vcsbasesubmiteditor.h
+++ b/src/plugins/vcsbase/vcsbasesubmiteditor.h
@@ -112,7 +112,6 @@ public:
     void setCheckScriptWorkingDirectory(const QString &);
 
     // Core::IEditor
-    bool createNew(const QString &contents);
     bool open(QString *errorString, const QString &fileName, const QString &realFileName);
     Core::IDocument *document();
     Core::Id id() const;
@@ -156,7 +155,7 @@ protected:
      * the file. The default implementation uses the text
      * of the description editor. */
     virtual QByteArray fileContents() const;
-    virtual bool setFileContents(const QString &contents);
+    virtual bool setFileContents(const QByteArray &contents);
 
     void setDescriptionMandatory(bool v);
     bool isDescriptionMandatory() const;