diff --git a/src/plugins/qmldesigner/core/model/modeltotextmerger.h b/src/plugins/qmldesigner/core/model/modeltotextmerger.h
index ad203d61104a326a9c40edc659e9d59e82ccb560..a1fef610bb91f75900aa2ed4dce67770615b5b7d 100644
--- a/src/plugins/qmldesigner/core/model/modeltotextmerger.h
+++ b/src/plugins/qmldesigner/core/model/modeltotextmerger.h
@@ -57,7 +57,13 @@ class ModelToTextMerger
 
 public:
     ModelToTextMerger(RewriterView *reWriterView);
-    void applyChanges(); // Note: his method might throw exceptions, as the model works this way. So to handle rewriting failures, you will also need to catch any exception coming out.
+
+    /**
+     *  Note: his method might throw exceptions, as the model works this way. So to
+     *  handle rewriting failures, you will also need to catch any exception coming
+     *  out.
+     */
+    void applyChanges();
 
     void nodeCreated(const ModelNode &createdNode);
     void nodeRemoved(const ModelNode &removedNode, const NodeAbstractProperty &parentProperty, PropertyChangeFlags propertyChange);
diff --git a/src/plugins/qmldesigner/core/model/texttomodelmerger.cpp b/src/plugins/qmldesigner/core/model/texttomodelmerger.cpp
index 7272fd81c977617fb834f106d6bf0192e27a3fda..e75b98a5c66f13a65aa93b266531d1f9f92a4cda 100644
--- a/src/plugins/qmldesigner/core/model/texttomodelmerger.cpp
+++ b/src/plugins/qmldesigner/core/model/texttomodelmerger.cpp
@@ -68,20 +68,33 @@ bool TextToModelMerger::isActive() const
     return m_isActive;
 }
 
-void TextToModelMerger::setupImports(QmlDomDocument &doc)
+void TextToModelMerger::setupImports(QmlDomDocument &doc,
+                                     DifferenceHandler &differenceHandler)
 {
-    foreach (const Import &import, m_rewriterView->model()->imports())
-        m_rewriterView->model()->removeImport(import);
+    QSet<Import> existingImports = m_rewriterView->model()->imports();
+
     foreach (const QmlDomImport &qmlImport, doc.imports()) {
         if (qmlImport.type() == QmlDomImport::Library) {
-            Import import(Import::createLibraryImport(QUrl(qmlImport.uri()), qmlImport.version(), qmlImport.qualifier()));
-            m_rewriterView->model()->addImport(import);
-        }
-        if (qmlImport.type() == QmlDomImport::File) {
-            Import import(Import:: createFileImport(qmlImport.uri(), qmlImport.version(), qmlImport.qualifier()));
-            m_rewriterView->model()->addImport(import);
+            Import import(Import::createLibraryImport(QUrl(qmlImport.uri()),
+                                                      qmlImport.version(),
+                                                      qmlImport.qualifier()));
+
+            if (!existingImports.remove(import))
+                differenceHandler.modelMissesImport(m_rewriterView->model(),
+                                                    import);
+        } else if (qmlImport.type() == QmlDomImport::File) {
+            Import import(Import:: createFileImport(qmlImport.uri(),
+                                                    qmlImport.version(),
+                                                    qmlImport.qualifier()));
+
+            if (!existingImports.remove(import))
+                differenceHandler.modelMissesImport(m_rewriterView->model(),
+                                                    import);
         }
     }
+
+    foreach (const Import &import, existingImports)
+        differenceHandler.importAbsentInQMl(m_rewriterView->model(), import);
 }
 
 bool TextToModelMerger::load(const QByteArray &data, DifferenceHandler &differenceHandler)
@@ -95,7 +108,7 @@ bool TextToModelMerger::load(const QByteArray &data, DifferenceHandler &differen
         const bool success = doc.load(&engine, data, url);
 
         if (success) {
-            setupImports(doc);
+            setupImports(doc, differenceHandler);
 
             const QmlDomObject rootDomObject = doc.rootObject();
             ModelNode modelRootNode = m_rewriterView->rootModelNode();
@@ -370,6 +383,16 @@ QVariant TextToModelMerger::convertToVariant(const ModelNode &node, const QmlDom
     }
 }
 
+void ModelValidator::modelMissesImport(Model *model, const Import &import)
+{
+    Q_ASSERT(model->imports().contains(import));
+}
+
+void ModelValidator::importAbsentInQMl(Model *model, const Import &import)
+{
+    Q_ASSERT(! model->imports().contains(import));
+}
+
 void ModelValidator::bindingExpressionsDiffer(BindingProperty &modelProperty, const QString &qmlBinding)
 {
     Q_ASSERT(modelProperty.expression() == qmlBinding);
@@ -443,6 +466,16 @@ void ModelValidator::idsDiffer(ModelNode &modelNode, const QString &qmlId)
     Q_ASSERT(0);
 }
 
+void ModelAmender::modelMissesImport(Model *model, const Import &import)
+{
+    model->addImport(import);
+}
+
+void ModelAmender::importAbsentInQMl(Model *model, const Import &import)
+{
+    model->removeImport(import);
+}
+
 void ModelAmender::bindingExpressionsDiffer(BindingProperty &modelProperty, const QString &qmlBinding)
 {
     modelProperty.toBindingProperty().setExpression(qmlBinding);
diff --git a/src/plugins/qmldesigner/core/model/texttomodelmerger.h b/src/plugins/qmldesigner/core/model/texttomodelmerger.h
index 209f6fe5d9c54166e11c62c77a4b529ca0e4be3e..53193d774c49556fc20a206ec5beca26071f4b91 100644
--- a/src/plugins/qmldesigner/core/model/texttomodelmerger.h
+++ b/src/plugins/qmldesigner/core/model/texttomodelmerger.h
@@ -31,6 +31,7 @@
 #define TEXTTOMODELMERGER_H
 
 #include "corelib_global.h"
+#include "import.h"
 #include "nodelistproperty.h"
 #include "modelnode.h"
 
@@ -53,7 +54,7 @@ public:
     TextToModelMerger(RewriterView *reWriterView);
     bool isActive() const;
 
-    void setupImports(QmlDomDocument &doc);
+    void setupImports(QmlDomDocument &doc, DifferenceHandler &differenceHandler);
     bool load(const QByteArray &data, DifferenceHandler &differenceHandler);
 
 protected:
@@ -95,6 +96,8 @@ public:
     virtual ~DifferenceHandler()
     {}
 
+    virtual void modelMissesImport(Model *model, const Import &import) = 0;
+    virtual void importAbsentInQMl(Model *model, const Import &import) = 0;
     virtual void bindingExpressionsDiffer(BindingProperty &modelProperty, const QString &qmlBinding) = 0;
     virtual void shouldBeBindingProperty(AbstractProperty &modelProperty, const QString &qmlBinding) = 0;
     virtual void shouldBeNodeListProperty(AbstractProperty &modelProperty, const QmlDomList &domList) = 0;
@@ -120,6 +123,8 @@ public:
     ~ModelValidator()
     {}
 
+    virtual void modelMissesImport(Model *model, const Import &import);
+    virtual void importAbsentInQMl(Model *model, const Import &import);
     virtual void bindingExpressionsDiffer(BindingProperty &modelProperty, const QString &qmlBinding);
     virtual void shouldBeBindingProperty(AbstractProperty &modelProperty, const QString &qmlBinding);
     virtual void shouldBeNodeListProperty(AbstractProperty &modelProperty, const QmlDomList &domList);
@@ -142,6 +147,8 @@ public:
     ~ModelAmender()
     {}
 
+    virtual void modelMissesImport(Model *model, const Import &import);
+    virtual void importAbsentInQMl(Model *model, const Import &import);
     virtual void bindingExpressionsDiffer(BindingProperty &modelProperty, const QString &qmlBinding);
     virtual void shouldBeBindingProperty(AbstractProperty &modelProperty, const QString &qmlBinding);
     virtual void shouldBeNodeListProperty(AbstractProperty &modelProperty, const QmlDomList &domList);