diff --git a/src/plugins/debugger/logwindow.cpp b/src/plugins/debugger/logwindow.cpp
index 40ee9bdb79e99eae3a2ab1c39e74f2f5d620221e..74dd0d547350e10b22ff14e489c483368b1b2092 100644
--- a/src/plugins/debugger/logwindow.cpp
+++ b/src/plugins/debugger/logwindow.cpp
@@ -156,7 +156,6 @@ public:
     DebuggerPane(QWidget *parent)
         : QPlainTextEdit(parent)
     {
-        setMaximumBlockCount(100000);
         setFrameStyle(QFrame::NoFrame);
         m_clearContentsAction = new QAction(this);
         m_clearContentsAction->setText(tr("Clear Contents"));
@@ -183,6 +182,18 @@ public:
         delete menu;
     }
 
+    void append(const QString &text)
+    {
+        const int N = 100000;
+        if (blockCount() > N) {
+            QTextBlock block = document()->findBlock(9 * N / 10);
+            QTextCursor tc(block);
+            tc.movePosition(QTextCursor::Start, QTextCursor::MoveAnchor);
+            tc.removeSelectedText();
+        }
+        appendPlainText(text);
+    }
+
 
 private slots:
     void saveContents();
@@ -434,7 +445,7 @@ void LogWindow::showOutput(int channel, const QString &output)
         }
         pos = nnpos + 1;
     }
-    m_combinedText->appendPlainText(out);
+    m_combinedText->append(out);
 
     if (atEnd) {
         cursor.movePosition(QTextCursor::End);
@@ -455,8 +466,8 @@ void LogWindow::showInput(int channel, const QString &input)
         return;
     }
     if (debuggerCore()->boolSetting(LogTimeStamps))
-        m_inputText->appendPlainText(logTimeStamp());
-    m_inputText->appendPlainText(input);
+        m_inputText->append(logTimeStamp());
+    m_inputText->append(input);
     QTextCursor cursor = m_inputText->textCursor();
     cursor.movePosition(QTextCursor::End);
     m_inputText->setTextCursor(cursor);
diff --git a/src/plugins/debugger/logwindow.h b/src/plugins/debugger/logwindow.h
index 4bceac728ff822c0196ee9041d810d1b5af53693..a71db75e5e242b3ac0b639ed9121e903e00f4050 100644
--- a/src/plugins/debugger/logwindow.h
+++ b/src/plugins/debugger/logwindow.h
@@ -47,6 +47,8 @@ QT_END_NAMESPACE
 namespace Debugger {
 namespace Internal {
 
+class DebuggerPane;
+
 class LogWindow : public QWidget
 {
     Q_OBJECT
@@ -78,8 +80,8 @@ signals:
     void statusMessageRequested(const QString &msg, int);
 
 private:
-    QPlainTextEdit *m_combinedText;  // combined input/output
-    QPlainTextEdit *m_inputText;     // scriptable input alone
+    DebuggerPane *m_combinedText;  // combined input/output
+    DebuggerPane *m_inputText;     // scriptable input alone
     QLineEdit *m_commandEdit;
     QLabel *m_commandLabel;
     bool m_ignoreNextInputEcho;