diff --git a/src/plugins/texteditor/basetextdocument.cpp b/src/plugins/texteditor/basetextdocument.cpp
index 1bffcb0499df06d19dd28756fa289a915382a3c6..46b4f76bc7ade26e76a9b6a2632c731557c760c2 100644
--- a/src/plugins/texteditor/basetextdocument.cpp
+++ b/src/plugins/texteditor/basetextdocument.cpp
@@ -71,6 +71,7 @@ public:
 
     QTextCursor indentOrUnindent(const QTextCursor &textCursor, bool doIndent);
     void resetRevisions();
+    void updateRevisions();
 
     QString m_defaultPath;
     QString m_suggestedFileName;
@@ -161,6 +162,23 @@ void BaseTextDocumentPrivate::resetRevisions()
         block.setRevision(documentLayout->lastSaveRevision);
 }
 
+void BaseTextDocumentPrivate::updateRevisions()
+{
+    BaseTextDocumentLayout *documentLayout = qobject_cast<BaseTextDocumentLayout*>(m_document->documentLayout());
+    QTC_ASSERT(documentLayout, return);
+    int oldLastSaveRevision = documentLayout->lastSaveRevision;
+    documentLayout->lastSaveRevision = m_document->revision();
+
+    if (oldLastSaveRevision != documentLayout->lastSaveRevision) {
+        for (QTextBlock block = m_document->begin(); block.isValid(); block = block.next()) {
+            if (block.revision() < 0 || block.revision() != oldLastSaveRevision)
+                block.setRevision(-documentLayout->lastSaveRevision - 1);
+            else
+                block.setRevision(documentLayout->lastSaveRevision);
+        }
+    }
+}
+
 BaseTextDocument::BaseTextDocument() : d(new BaseTextDocumentPrivate(this))
 {
     connect(d->m_document, SIGNAL(modificationChanged(bool)), this, SIGNAL(changed()));
@@ -451,6 +469,7 @@ bool BaseTextDocument::save(QString *errorString, const QString &saveFileName, b
 
     // inform about the new filename
     const QFileInfo fi(fName);
+    d->updateRevisions();
     d->m_document->setModified(false);
     setFilePath(QDir::cleanPath(fi.absoluteFilePath()));
     emit changed();
@@ -539,6 +558,7 @@ bool BaseTextDocument::open(QString *errorString, const QString &fileName, const
             qobject_cast<BaseTextDocumentLayout*>(d->m_document->documentLayout());
         QTC_ASSERT(documentLayout, return true);
         documentLayout->lastSaveRevision = d->m_autoSaveRevision = d->m_document->revision();
+        d->updateRevisions();
         d->m_document->setModified(fileName != realFileName);
         setFilePath(QDir::cleanPath(fi.absoluteFilePath()));
     }
diff --git a/src/plugins/texteditor/basetexteditor.cpp b/src/plugins/texteditor/basetexteditor.cpp
index 3727a0530a1d1e81a9d14d4afaf7ecd44896c17f..65779aeececcf4d87757302ebef538b0462fa89d 100644
--- a/src/plugins/texteditor/basetexteditor.cpp
+++ b/src/plugins/texteditor/basetexteditor.cpp
@@ -247,7 +247,7 @@ void BaseTextEditorWidget::ctor(const QSharedPointer<BaseTextDocument> &doc)
     connect(d->m_codeAssistant.data(), SIGNAL(finished()), this, SIGNAL(assistFinished()));
 
     connect(this, SIGNAL(blockCountChanged(int)), this, SLOT(slotUpdateExtraAreaWidth()));
-    connect(this, SIGNAL(modificationChanged(bool)), this, SLOT(slotModificationChanged(bool)));
+    connect(this, SIGNAL(modificationChanged(bool)), d->m_extraArea, SLOT(update()));
     connect(this, SIGNAL(cursorPositionChanged()), this, SLOT(slotCursorPositionChanged()));
     connect(this, SIGNAL(updateRequest(QRect,int)), this, SLOT(slotUpdateRequest(QRect,int)));
     connect(this, SIGNAL(selectionChanged()), this, SLOT(slotSelectionChanged()));
@@ -3826,30 +3826,6 @@ void BaseTextEditorWidget::drawFoldingMarker(QPainter *painter, const QPalette &
     }
 }
 
-void BaseTextEditorWidget::slotModificationChanged(bool m)
-{
-    if (m)
-        return;
-
-    QTextDocument *doc = document();
-    BaseTextDocumentLayout *documentLayout = qobject_cast<BaseTextDocumentLayout*>(doc->documentLayout());
-    QTC_ASSERT(documentLayout, return);
-    int oldLastSaveRevision = documentLayout->lastSaveRevision;
-    documentLayout->lastSaveRevision = doc->revision();
-
-    if (oldLastSaveRevision != documentLayout->lastSaveRevision) {
-        QTextBlock block = doc->begin();
-        while (block.isValid()) {
-            if (block.revision() < 0 || block.revision() != oldLastSaveRevision)
-                block.setRevision(-documentLayout->lastSaveRevision - 1);
-            else
-                block.setRevision(documentLayout->lastSaveRevision);
-            block = block.next();
-        }
-    }
-    d->m_extraArea->update();
-}
-
 void BaseTextEditorWidget::slotUpdateRequest(const QRect &r, int dy)
 {
     if (dy) {
@@ -4712,22 +4688,6 @@ void BaseTextEditorWidget::clearLink()
     d->m_linkPressed = false;
 }
 
-void BaseTextEditorWidget::markBlocksAsChanged(QList<int> blockNumbers)
-{
-    QTextBlock block = document()->begin();
-    while (block.isValid()) {
-        if (block.revision() < 0)
-            block.setRevision(-block.revision() - 1);
-        block = block.next();
-    }
-    foreach (const int blockNumber, blockNumbers) {
-        QTextBlock block = document()->findBlockByNumber(blockNumber);
-        if (block.isValid())
-            block.setRevision(-block.revision() - 1);
-    }
-}
-
-
 void BaseTextEditorWidget::highlightSearchResults(const QString &txt, Core::FindFlags findFlags)
 {
     QString pattern = txt;
diff --git a/src/plugins/texteditor/basetexteditor.h b/src/plugins/texteditor/basetexteditor.h
index 490261a4cf5b803f81dfef02165efec09bc1536a..864955e69b7e8c6c977957b88e42cdd4c9accc56 100644
--- a/src/plugins/texteditor/basetexteditor.h
+++ b/src/plugins/texteditor/basetexteditor.h
@@ -378,8 +378,6 @@ public:
     const DisplaySettings &displaySettings() const;
     const MarginSettings &marginSettings() const;
 
-    void markBlocksAsChanged(QList<int> blockNumbers);
-
     void ensureCursorVisible();
 
     enum ExtraSelectionKind {
@@ -496,7 +494,6 @@ protected:
 protected slots:
     virtual void slotUpdateExtraArea();
     virtual void slotUpdateExtraAreaWidth();
-    virtual void slotModificationChanged(bool);
     virtual void slotUpdateRequest(const QRect &r, int dy);
     virtual void slotCursorPositionChanged();
     virtual void slotUpdateBlockNotify(const QTextBlock &);