diff --git a/src/quick/items/qquicktext.cpp b/src/quick/items/qquicktext.cpp
index d01512740d67c10c0f70823f7712d3b9d92bcab7..274ea93abbd6ed4063ccabd4685f82b329f4669d 100644
--- a/src/quick/items/qquicktext.cpp
+++ b/src/quick/items/qquicktext.cpp
@@ -67,29 +67,6 @@ QT_BEGIN_NAMESPACE
 
 extern Q_GUI_EXPORT bool qt_applefontsmoothing_enabled;
 
-class QQuickTextDocumentWithImageResources : public QTextDocument {
-    Q_OBJECT
-
-public:
-    QQuickTextDocumentWithImageResources(QQuickText *parent);
-    virtual ~QQuickTextDocumentWithImageResources();
-
-    void setText(const QString &);
-    int resourcesLoading() const { return outstanding; }
-
-protected:
-    QVariant loadResource(int type, const QUrl &name);
-
-private slots:
-    void requestFinished();
-
-private:
-    QHash<QUrl, QDeclarativePixmap *> m_resources;
-
-    int outstanding;
-    static QSet<QUrl> errors;
-};
-
 DEFINE_BOOL_CONFIG_OPTION(qmlDisableDistanceField, QML_DISABLE_DISTANCEFIELD)
 DEFINE_BOOL_CONFIG_OPTION(enableImageCache, QML_ENABLE_TEXT_IMAGE_CACHE);
 
@@ -123,7 +100,7 @@ void QQuickTextPrivate::init()
     q->setFlag(QQuickItem::ItemHasContents);
 }
 
-QQuickTextDocumentWithImageResources::QQuickTextDocumentWithImageResources(QQuickText *parent)
+QQuickTextDocumentWithImageResources::QQuickTextDocumentWithImageResources(QQuickItem *parent)
 : QTextDocument(parent), outstanding(0)
 {
     setUndoRedoEnabled(false);
@@ -171,25 +148,32 @@ void QQuickTextDocumentWithImageResources::requestFinished()
 {
     outstanding--;
     if (outstanding == 0) {
-        QQuickText *textItem = static_cast<QQuickText*>(parent());
-        QString text = textItem->text();
-#ifndef QT_NO_TEXTHTMLPARSER
-        setHtml(text);
-#else
-        setPlainText(text);
-#endif
-        QQuickTextPrivate *d = QQuickTextPrivate::get(textItem);
-        d->updateLayout();
+        markContentsDirty(0, characterCount());
+
+        if (QQuickText *item = qobject_cast<QQuickText *>(parent()))
+            QQuickTextPrivate::get(item)->updateLayout();
     }
 }
 
+void QQuickTextDocumentWithImageResources::clear()
+{
+    clearResources();
+
+    QTextDocument::clear();
+}
+
+void QQuickTextDocumentWithImageResources::clearResources()
+{
+    foreach (QDeclarativePixmap *pixmap, m_resources)
+        pixmap->clear(this);
+    qDeleteAll(m_resources);
+    m_resources.clear();
+    outstanding = 0;
+}
+
 void QQuickTextDocumentWithImageResources::setText(const QString &text)
 {
-    if (!m_resources.isEmpty()) {
-        qDeleteAll(m_resources);
-        m_resources.clear();
-        outstanding = 0;
-    }
+    clearResources();
 
 #ifndef QT_NO_TEXTHTMLPARSER
     setHtml(text);
@@ -1946,5 +1930,3 @@ void QQuickText::mouseReleaseEvent(QMouseEvent *event)
 }
 
 QT_END_NAMESPACE
-
-#include "qquicktext.moc"
diff --git a/src/quick/items/qquicktext_p_p.h b/src/quick/items/qquicktext_p_p.h
index 2035f47a9da8c2d6aabdce5e0c709db5ad498dbd..756acbfbf822e3ea0ba555e0c43815251a8aa8ba 100644
--- a/src/quick/items/qquicktext_p_p.h
+++ b/src/quick/items/qquicktext_p_p.h
@@ -54,7 +54,7 @@
 // We mean it.
 //
 
-#include "qquickitem.h"
+#include "qquicktext_p.h"
 #include "qquickimplicitsizeitem_p_p.h"
 
 #include <QtDeclarative/qdeclarative.h>
@@ -164,6 +164,34 @@ public:
 #endif
 };
 
+class QDeclarativePixmap;
+class QQuickTextDocumentWithImageResources : public QTextDocument {
+    Q_OBJECT
+
+public:
+    QQuickTextDocumentWithImageResources(QQuickItem *parent);
+    virtual ~QQuickTextDocumentWithImageResources();
+
+    void setText(const QString &);
+    int resourcesLoading() const { return outstanding; }
+
+    void clearResources();
+
+    void clear();
+
+protected:
+    QVariant loadResource(int type, const QUrl &name);
+
+private slots:
+    void requestFinished();
+
+private:
+    QHash<QUrl, QDeclarativePixmap *> m_resources;
+
+    int outstanding;
+    static QSet<QUrl> errors;
+};
+
 QT_END_NAMESPACE
 
 #endif // QQUICKTEXT_P_P_H
diff --git a/src/quick/items/qquicktextedit.cpp b/src/quick/items/qquicktextedit.cpp
index c43a5be14c9afc462435ca690ee2d66707c4227d..254a13342b47260e066beee0600b25970b451ef8 100644
--- a/src/quick/items/qquicktextedit.cpp
+++ b/src/quick/items/qquicktextedit.cpp
@@ -41,6 +41,7 @@
 
 #include "qquicktextedit_p.h"
 #include "qquicktextedit_p_p.h"
+#include "qquicktext_p_p.h"
 #include "qquickevents_p_p.h"
 #include "qquickcanvas.h"
 #include "qquicktextnode_p.h"
@@ -253,6 +254,7 @@ void QQuickTextEdit::setText(const QString &text)
     if (QQuickTextEdit::text() == text)
         return;
 
+    d->document->clearResources();
     d->richText = d->format == RichText || (d->format == AutoText && Qt::mightBeRichText(text));
     if (d->richText) {
 #ifndef QT_NO_TEXTHTMLPARSER
@@ -1626,7 +1628,9 @@ void QQuickTextEditPrivate::init()
     q->setFlag(QQuickItem::ItemAcceptsInputMethod);
     q->setFlag(QQuickItem::ItemHasContents);
 
-    control = new QTextControl(q);
+    document = new QQuickTextDocumentWithImageResources(q);
+
+    control = new QTextControl(document, q);
     control->setIgnoreUnusedNavigationEvents(true);
     control->setTextInteractionFlags(Qt::LinksAccessibleByMouse | Qt::TextSelectableByKeyboard | Qt::TextEditable);
     control->setDragEnabled(false);
@@ -1664,7 +1668,6 @@ void QQuickTextEditPrivate::init()
     canPaste = control->canPaste();
 #endif
 
-    document = control->document();
     document->setDefaultFont(font);
     document->setDocumentMargin(textMargin);
     document->setUndoRedoEnabled(false); // flush undo buffer.
diff --git a/src/quick/items/qquicktextedit_p_p.h b/src/quick/items/qquicktextedit_p_p.h
index 7bcbe2a189b3e5cf2ff16369d304c9437c9f8016..583b13bc69af2d37f0492548c5212c433b84bfdb 100644
--- a/src/quick/items/qquicktextedit_p_p.h
+++ b/src/quick/items/qquicktextedit_p_p.h
@@ -62,7 +62,7 @@
 
 QT_BEGIN_NAMESPACE
 class QTextLayout;
-class QTextDocument;
+class QQuickTextDocumentWithImageResources;
 class QTextControl;
 class QQuickTextEditPrivate : public QQuickImplicitSizeItemPrivate
 {
@@ -121,7 +121,7 @@ public:
     QDeclarativeComponent* cursorComponent;
     QQuickItem* cursor;
     QQuickTextEdit::TextFormat format;
-    QTextDocument *document;
+    QQuickTextDocumentWithImageResources *document;
     QTextControl *control;
     QQuickTextEdit::WrapMode wrapMode;
     QQuickTextEdit::SelectionMode mouseSelectionMode;