diff --git a/src/plugins/texteditor/basetexteditor.cpp b/src/plugins/texteditor/basetexteditor.cpp
index 249666b2ac710056fd0d5f03db35abf64a52e1a8..a543d85d484045fdc9c75c0a38025abb2cc9b974 100644
--- a/src/plugins/texteditor/basetexteditor.cpp
+++ b/src/plugins/texteditor/basetexteditor.cpp
@@ -1598,15 +1598,29 @@ void BaseTextEditor::setBaseTextDocument(BaseTextDocument *doc)
     }
 }
 
-// called before reload
-void BaseTextEditor::memorizeCursorPosition()
+void BaseTextEditor::documentAboutToBeReloaded()
 {
+    //memorize cursor position
     d->m_tempState = saveState();
+
+    // remove extra selections (loads of QTextCursor objects)
+
+    for (int i = 0; i < NExtraSelectionKinds; ++i)
+        d->m_extraSelections[i].clear();
+    QPlainTextEdit::setExtraSelections(QList<QTextEdit::ExtraSelection>());
+
+    // clear all overlays
+    if (d->m_overlay)
+        d->m_overlay->clear();
+    if (d->m_snippetOverlay)
+        d->m_snippetOverlay->clear();
+    if (d->m_searchResultOverlay)
+        d->m_searchResultOverlay->clear();
 }
 
-// called after reload
-void BaseTextEditor::restoreCursorPosition()
+void BaseTextEditor::documentReloaded()
 {
+    // restore cursor position
     restoreState(d->m_tempState);
 }
 
@@ -1914,8 +1928,8 @@ void BaseTextEditorPrivate::setupDocumentSignals(BaseTextDocument *document)
         SLOT(editorContentsChange(int,int,int)), Qt::DirectConnection);
     QObject::connect(document, SIGNAL(changed()), q, SIGNAL(changed()));
     QObject::connect(document, SIGNAL(titleChanged(QString)), q, SLOT(setDisplayName(const QString &)));
-    QObject::connect(document, SIGNAL(aboutToReload()), q, SLOT(memorizeCursorPosition()));
-    QObject::connect(document, SIGNAL(reloaded()), q, SLOT(restoreCursorPosition()));
+    QObject::connect(document, SIGNAL(aboutToReload()), q, SLOT(documentAboutToBeReloaded()));
+    QObject::connect(document, SIGNAL(reloaded()), q, SLOT(documentReloaded()));
     q->slotUpdateExtraAreaWidth();
 }
 
diff --git a/src/plugins/texteditor/basetexteditor.h b/src/plugins/texteditor/basetexteditor.h
index 60bf11d829670daa38c2556b56163cafa4c54813..1bab6597a77c0c7b3e60da4b551e628ddbf34c6e 100644
--- a/src/plugins/texteditor/basetexteditor.h
+++ b/src/plugins/texteditor/basetexteditor.h
@@ -304,8 +304,8 @@ protected:
 
 private slots:
     void editorContentsChange(int position, int charsRemoved, int charsAdded);
-    void memorizeCursorPosition();
-    void restoreCursorPosition();
+    void documentAboutToBeReloaded();
+    void documentReloaded();
     void highlightSearchResults(const QString &txt, Find::IFindSupport::FindFlags findFlags);
     void setFindScope(const QTextCursor &start, const QTextCursor &end, int);
     void currentEditorChanged(Core::IEditor *editor);