diff --git a/src/plugins/texteditor/basetexteditor.cpp b/src/plugins/texteditor/basetexteditor.cpp
index beb49cb46d5f37de4ebaa6f475c9c8d3af3e7eb5..a05df114a2cc33beb41081e0efbf3065c2ff5f96 100644
--- a/src/plugins/texteditor/basetexteditor.cpp
+++ b/src/plugins/texteditor/basetexteditor.cpp
@@ -498,8 +498,6 @@ BaseTextEditor *BaseTextEditorWidget::editor() const
         d->m_codeAssistant->configure(d->m_editor);
         connect(this, SIGNAL(textChanged()),
                 d->m_editor, SIGNAL(contentsChanged()));
-        connect(this, SIGNAL(changed()),
-                d->m_editor->document(), SIGNAL(changed()));
         connect(qobject_cast<BaseTextDocument *>(d->m_editor->document()),SIGNAL(mimeTypeChanged()),
                 d->m_codeAssistant.data(), SLOT(reconfigure()));
     }
@@ -2476,6 +2474,7 @@ void BaseTextEditorWidgetPrivate::setupDocumentSignals(const QSharedPointer<Base
     if (!oldDocument.isNull()) {
         q->disconnect(oldDocument->document(), 0, q, 0);
         q->disconnect(oldDocument.data(), 0, q, 0);
+        q->disconnect(q, 0, oldDocument.data(), 0);
     }
 
     QTextDocument *doc = document->document();
@@ -2498,6 +2497,7 @@ void BaseTextEditorWidgetPrivate::setupDocumentSignals(const QSharedPointer<Base
     QObject::connect(documentLayout, SIGNAL(updateExtraArea()), q, SLOT(slotUpdateExtraArea()));
     QObject::connect(q, SIGNAL(requestBlockUpdate(QTextBlock)), documentLayout, SIGNAL(updateBlock(QTextBlock)));
     QObject::connect(doc, SIGNAL(modificationChanged(bool)), q, SIGNAL(changed()));
+    QObject::connect(q, SIGNAL(changed()), document.data(), SIGNAL(changed()));
     QObject::connect(doc, SIGNAL(contentsChange(int,int,int)), q,
         SLOT(editorContentsChange(int,int,int)), Qt::DirectConnection);
     QObject::connect(document.data(), SIGNAL(aboutToReload()), q, SLOT(documentAboutToBeReloaded()));