diff --git a/src/plugins/qmldesigner/core/include/abstractview.h b/src/plugins/qmldesigner/core/include/abstractview.h
index 3d24c6bff033345100ab634024897300528a4a1e..7a087086b1e88b8b34a28afd6064f33275b1e5e7 100644
--- a/src/plugins/qmldesigner/core/include/abstractview.h
+++ b/src/plugins/qmldesigner/core/include/abstractview.h
@@ -120,7 +120,8 @@ public:
 
     virtual void nodeOrderChanged(const NodeListProperty &listProperty, const ModelNode &movedNode, int oldIndex) = 0;
 
-    virtual void importsChanged();
+    virtual void importAdded(const Import &import);
+    virtual void importRemoved(const Import &import);
 
     virtual void auxiliaryDataChanged(const ModelNode &node, const QString &name, const QVariant &data);
 
diff --git a/src/plugins/qmldesigner/core/include/forwardview.h b/src/plugins/qmldesigner/core/include/forwardview.h
index f7c74ce3fafbef614b372b7d01b95749df130040..dd9a42555f8e03d86850f5a7668c2b257274f9a6 100644
--- a/src/plugins/qmldesigner/core/include/forwardview.h
+++ b/src/plugins/qmldesigner/core/include/forwardview.h
@@ -71,7 +71,8 @@ public:
 
     void nodeOrderChanged(const NodeListProperty &listProperty, const ModelNode &movedNode, int oldIndex);
 
-    void importsChanged();
+    void importAdded(const Import &import);
+    void importRemoved(const Import &import);
 
     void auxiliaryDataChanged(const ModelNode &node, const QString &name, const QVariant &data);
 
@@ -218,12 +219,21 @@ void ForwardView<ViewType>::nodeOrderChanged(const NodeListProperty &listPropert
 }
 
 template <class ViewType>
-void ForwardView<ViewType>::importsChanged()
+void ForwardView<ViewType>::importAdded(const Import &import)
 {
-    AbstractView::importsChanged();
+    AbstractView::importAdded(import);
 
     foreach (const ViewTypePointer &view, m_targetViewList)
-        view->importsChanged();
+        view->importAdded(import);
+}
+
+template <class ViewType>
+void ForwardView<ViewType>::importRemoved(const Import &import)
+{
+    AbstractView::importRemoved(import);
+
+    foreach (const ViewTypePointer &view, m_targetViewList)
+        view->importRemoved(import);
 }
 
 template <class ViewType>
diff --git a/src/plugins/qmldesigner/core/include/rewriterview.h b/src/plugins/qmldesigner/core/include/rewriterview.h
index 73d663045c4927f5314d5ce242bd262da6d7d9c2..1724fbab1b7140392f0fa033ccb507caf4846624 100644
--- a/src/plugins/qmldesigner/core/include/rewriterview.h
+++ b/src/plugins/qmldesigner/core/include/rewriterview.h
@@ -125,6 +125,9 @@ public:
     void nodeTypeChanged(const ModelNode &node,const QString &type, int majorVersion, int minorVersion);
     void customNotification(const AbstractView *view, const QString &identifier, const QList<ModelNode> &nodeList, const QList<QVariant> &data);
 
+    void importAdded(const Import &import);
+    void importRemoved(const Import &import);
+
     void fileUrlChanged(const QUrl &oldUrl, const QUrl &newUrl);
 
     void selectedNodesChanged(const QList<ModelNode> &selectedNodeList, const QList<ModelNode> &lastSelectedNodeList);
diff --git a/src/plugins/qmldesigner/core/model/abstractview.cpp b/src/plugins/qmldesigner/core/model/abstractview.cpp
index ff1c3c185fa4ad64401116fec3f579194db0d0ee..ec8c5162e0434afeba141e58f812ac7a769f6302 100644
--- a/src/plugins/qmldesigner/core/model/abstractview.cpp
+++ b/src/plugins/qmldesigner/core/model/abstractview.cpp
@@ -203,10 +203,18 @@ void AbstractView::fileUrlChanged(const QUrl &/*oldUrl*/, const QUrl &/*newUrl*/
 }
 
 /*!
-\fn AbstractView::importsChanged()
-\brief Called when the imports for the model change.
+\fn AbstractView::importAdded(const Import &import)
+\brief Called when an import has been added to the model
 */
-void AbstractView::importsChanged()
+void AbstractView::importAdded(const Import &/*import*/)
+{
+}
+
+/*!
+\fn AbstractView::importRemoved(const Import &import)
+\brief Called when an import has been removed from the model
+*/
+void AbstractView::importRemoved(const Import &/*import*/)
 {
 }
 
diff --git a/src/plugins/qmldesigner/core/model/model.cpp b/src/plugins/qmldesigner/core/model/model.cpp
index 4a5d4c4710c454872a725f9ad94a4da60a0a3220..6368a894a9716c70978d1023960d7ae8fa5d9372 100644
--- a/src/plugins/qmldesigner/core/model/model.cpp
+++ b/src/plugins/qmldesigner/core/model/model.cpp
@@ -117,26 +117,13 @@ Model *ModelPrivate::create(QString type, int major, int minor)
     return model;
 }
 
-void ModelPrivate::setImports(const QSet<Import> &imports)
-{
-    QList<Import> added = QSet<Import>(imports).subtract(m_imports).toList();
-    QList<Import> removed = QSet<Import>(m_imports).subtract(imports).toList();
-
-    if (added.isEmpty() && removed.isEmpty())
-        return;
-
-    m_imports = imports;
-
-    notifyImportsChanged();
-}
-
 void ModelPrivate::addImport(const Import &import)
 {
     if (m_imports.contains(import))
         return;
 
     m_imports.insert(import);
-    notifyImportsChanged();
+    notifyImportAdded(import);
 }
 
 void ModelPrivate::removeImport(const Import &import)
@@ -144,13 +131,19 @@ void ModelPrivate::removeImport(const Import &import)
     if (!m_imports.remove(import))
         return;
 
-    notifyImportsChanged();
+    notifyImportRemoved(import);
+}
+
+void ModelPrivate::notifyImportAdded(const Import &import) const
+{
+    foreach (const QWeakPointer<AbstractView> &view, m_viewList)
+        view->importAdded(import);
 }
 
-void ModelPrivate::notifyImportsChanged() const
+void ModelPrivate::notifyImportRemoved(const Import &import) const
 {
     foreach (const QWeakPointer<AbstractView> &view, m_viewList)
-        view->importsChanged();
+        view->importRemoved(import);
 }
 
 QUrl ModelPrivate::fileUrl() const
diff --git a/src/plugins/qmldesigner/core/model/model_p.h b/src/plugins/qmldesigner/core/model/model_p.h
index 4f3dd49addab4b800807df99957bdd5275508f39..f99c49e2953ad62ae492cb301c6a71a5044424ae 100644
--- a/src/plugins/qmldesigner/core/model/model_p.h
+++ b/src/plugins/qmldesigner/core/model/model_p.h
@@ -155,10 +155,10 @@ public:
 
     // Imports:
     QSet<Import> imports() const { return m_imports; }
-    void setImports(const QSet<Import> &imports);
     void addImport(const Import &import);
     void removeImport(const Import &import);
-    void notifyImportsChanged() const;
+    void notifyImportAdded(const Import &import) const;
+    void notifyImportRemoved(const Import &import) const;
 
 
     //node state property manipulation
diff --git a/src/plugins/qmldesigner/core/model/rewriterview.cpp b/src/plugins/qmldesigner/core/model/rewriterview.cpp
index 8eae32e8d54bb29ade18ba695347bd2a8a7d3eae..61194d1e609c63718476f2d0f5819b7f80a1c4d6 100644
--- a/src/plugins/qmldesigner/core/model/rewriterview.cpp
+++ b/src/plugins/qmldesigner/core/model/rewriterview.cpp
@@ -261,6 +261,30 @@ void RewriterView::nodeReparented(const ModelNode &node, const NodeAbstractPrope
         applyChanges();
 }
 
+void RewriterView::importAdded(const Import &import)
+{
+    Q_ASSERT(textModifier());
+    if (textToModelMerger()->isActive())
+        return;
+
+    modelToTextMerger()->addImport(import);
+
+    if (!isModificationGroupActive())
+        applyChanges();
+}
+
+void RewriterView::importRemoved(const Import &import)
+{
+    Q_ASSERT(textModifier());
+    if (textToModelMerger()->isActive())
+        return;
+
+    modelToTextMerger()->removeImport(import);
+
+    if (!isModificationGroupActive())
+        applyChanges();
+}
+
 void RewriterView::fileUrlChanged(const QUrl &/*oldUrl*/, const QUrl &/*newUrl*/)
 {
 }