diff --git a/src/libs/utils/outputformatter.h b/src/libs/utils/outputformatter.h
index 7179eb0447afbef5d3116372b129015c992b7bb2..eccaf7dce0e70ffb2d19ed309ed5ade4e4e8cc6a 100644
--- a/src/libs/utils/outputformatter.h
+++ b/src/libs/utils/outputformatter.h
@@ -58,7 +58,7 @@ public:
     virtual ~OutputFormatter();
 
     QPlainTextEdit *plainTextEdit() const;
-    void setPlainTextEdit(QPlainTextEdit *plainText);
+    virtual void setPlainTextEdit(QPlainTextEdit *plainText);
 
     QFont font() const;
     void setFont(const QFont &font);
diff --git a/src/plugins/qtsupport/qtoutputformatter.cpp b/src/plugins/qtsupport/qtoutputformatter.cpp
index 1f0de5487795263df23f1866a664afd6a319f3dc..dc8e40323d6fa9d9bd009434ac3c302ad551a15b 100644
--- a/src/plugins/qtsupport/qtoutputformatter.cpp
+++ b/src/plugins/qtsupport/qtoutputformatter.cpp
@@ -81,6 +81,7 @@ public:
     QPointer<Project> project;
     QString lastLine;
     FileInProjectFinder projectFinder;
+    QTextCursor cursor;
 };
 
 } // namespace Internal
@@ -172,14 +173,14 @@ void QtOutputFormatter::appendMessagePart(QTextCursor &cursor, const QString &tx
 
 void QtOutputFormatter::appendMessage(const QString &txt, const QTextCharFormat &format)
 {
-    QTextCursor cursor(plainTextEdit()->document());
-    cursor.movePosition(QTextCursor::End);
-    cursor.beginEditBlock();
+    if (!d->cursor.atEnd())
+        d->cursor.movePosition(QTextCursor::End);
+    d->cursor.beginEditBlock();
 
     foreach (const FormattedText &output, parseAnsi(txt, format))
-        appendMessagePart(cursor, output.text, output.format);
+        appendMessagePart(d->cursor, output.text, output.format);
 
-    cursor.endEditBlock();
+    d->cursor.endEditBlock();
 }
 
 void QtOutputFormatter::appendLine(QTextCursor &cursor, const LinkResult &lr,
@@ -263,6 +264,12 @@ void QtOutputFormatter::handleLink(const QString &href)
     }
 }
 
+void QtOutputFormatter::setPlainTextEdit(QPlainTextEdit *plainText)
+{
+    OutputFormatter::setPlainTextEdit(plainText);
+    d->cursor = plainText ? plainText->textCursor() : QTextCursor();
+}
+
 void QtOutputFormatter::clearLastLine()
 {
     OutputFormatter::clearLastLine();
diff --git a/src/plugins/qtsupport/qtoutputformatter.h b/src/plugins/qtsupport/qtoutputformatter.h
index 397d7dc3e4d6cb34ea9510fe938198f50c5f737c..5adf74f7963150222af340e0f582b0688efd9356 100644
--- a/src/plugins/qtsupport/qtoutputformatter.h
+++ b/src/plugins/qtsupport/qtoutputformatter.h
@@ -63,6 +63,7 @@ public:
     void appendMessage(const QString &text, Utils::OutputFormat format);
     void appendMessage(const QString &text, const QTextCharFormat &format);
     void handleLink(const QString &href);
+    void setPlainTextEdit(QPlainTextEdit *plainText);
 
 protected:
     void clearLastLine();