diff --git a/src/plugins/texteditor/basetextdocument.cpp b/src/plugins/texteditor/basetextdocument.cpp
index c9641d3f2c778bd8a03e9815f1e0cdf0ff427430..9234b2821f279d1b2cec4fe9288cf21c5ce3689e 100644
--- a/src/plugins/texteditor/basetextdocument.cpp
+++ b/src/plugins/texteditor/basetextdocument.cpp
@@ -97,7 +97,6 @@ BaseTextDocument::BaseTextDocument() : d(new BaseTextDocumentPrivate(this))
 
 BaseTextDocument::~BaseTextDocument()
 {
-    documentClosing();
     delete d->m_document;
     d->m_document = 0;
     delete d;
@@ -377,7 +376,10 @@ bool BaseTextDocument::reload(QString *errorString, QTextCodec *codec)
 bool BaseTextDocument::reload(QString *errorString)
 {
     emit aboutToReload();
-    documentClosing(); // removes text marks non-permanently
+    BaseTextDocumentLayout *documentLayout =
+        qobject_cast<BaseTextDocumentLayout*>(d->m_document->documentLayout());
+    if (documentLayout)
+        documentLayout->documentClosing(); // removes text marks non-permanently
 
     if (!open(errorString, d->m_fileName, d->m_fileName))
         return false;
@@ -471,16 +473,6 @@ void BaseTextDocument::ensureFinalNewLine(QTextCursor& cursor)
     }
 }
 
-void BaseTextDocument::documentClosing()
-{
-    QTextBlock block = d->m_document->begin();
-    while (block.isValid()) {
-        if (TextBlockUserData *data = static_cast<TextBlockUserData *>(block.userData()))
-            data->documentClosing();
-        block = block.next();
-    }
-}
-
 bool BaseTextDocument::hasHighlightWarning() const
 {
     return d->m_hasHighlightWarning;
diff --git a/src/plugins/texteditor/basetextdocument.h b/src/plugins/texteditor/basetextdocument.h
index 0939eabaf365f1234f9db45aa3e5eaafabe9e551..39f9b67c2b504bb25bf63c31904690b72dfa8562 100644
--- a/src/plugins/texteditor/basetextdocument.h
+++ b/src/plugins/texteditor/basetextdocument.h
@@ -110,7 +110,6 @@ signals:
 private:
     void cleanWhitespace(QTextCursor &cursor, bool cleanIndentation, bool inEntireDocument);
     void ensureFinalNewLine(QTextCursor &cursor);
-    void documentClosing();
 
     BaseTextDocumentPrivate *d;
 };
diff --git a/src/plugins/texteditor/basetextdocumentlayout.cpp b/src/plugins/texteditor/basetextdocumentlayout.cpp
index 46bede5c716ebd2f9fbd705c7505b91369230e68..0973c6bd1b2a9e75aea36a177ffd4777d0719c28 100644
--- a/src/plugins/texteditor/basetextdocumentlayout.cpp
+++ b/src/plugins/texteditor/basetextdocumentlayout.cpp
@@ -516,6 +516,7 @@ BaseTextDocumentLayout::BaseTextDocumentLayout(QTextDocument *doc)
 
 BaseTextDocumentLayout::~BaseTextDocumentLayout()
 {
+    documentClosing();
 }
 
 void BaseTextDocumentLayout::setParentheses(const QTextBlock &block, const Parentheses &parentheses)
@@ -699,6 +700,17 @@ QSizeF BaseTextDocumentLayout::documentSize() const
     return size;
 }
 
+void BaseTextDocumentLayout::documentClosing()
+{
+    QTextBlock block = document()->begin();
+    while (block.isValid()) {
+        if (TextBlockUserData *data = static_cast<TextBlockUserData *>(block.userData()))
+            data->documentClosing();
+        block = block.next();
+    }
+}
+
+
 void BaseTextDocumentLayout::updateMarksLineNumber()
 {
     QTextBlock block = document()->begin();
diff --git a/src/plugins/texteditor/basetextdocumentlayout.h b/src/plugins/texteditor/basetextdocumentlayout.h
index 80d614190b4b3d9cf83850d4efdef3de2e973d96..4f052a93b30b1fcfb2c562e79264c14be5fd5f28 100644
--- a/src/plugins/texteditor/basetextdocumentlayout.h
+++ b/src/plugins/texteditor/basetextdocumentlayout.h
@@ -214,6 +214,7 @@ public:
 
     QSizeF documentSize() const;
 
+    void documentClosing();
     void updateMarksLineNumber();
     void updateMarksBlock(const QTextBlock &block);
 };