diff --git a/src/plugins/qmldesigner/components/formeditor/formeditoritem.cpp b/src/plugins/qmldesigner/components/formeditor/formeditoritem.cpp
index bedfac68d9adf27634a4bbf14f88e13fdc1e3865..fd3d824a1533c904f6affbc408397700cbcb1642 100644
--- a/src/plugins/qmldesigner/components/formeditor/formeditoritem.cpp
+++ b/src/plugins/qmldesigner/components/formeditor/formeditoritem.cpp
@@ -65,7 +65,8 @@ FormEditorItem::FormEditorItem(const QmlItemNode &qmlItemNode, FormEditorScene*
     m_qmlItemNode(qmlItemNode),
     m_borderWidth(1.0),
     m_highlightBoundingRect(false),
-    m_isContentVisible(true)
+    m_isContentVisible(true),
+    m_isFormEditorVisible(true)
 {
     setCacheMode(QGraphicsItem::DeviceCoordinateCache);
     setup();
@@ -195,6 +196,17 @@ bool FormEditorItem::isContentVisible() const
     return m_isContentVisible;
 }
 
+
+bool FormEditorItem::isFormEditorVisible() const
+{
+    return m_isFormEditorVisible;
+}
+void FormEditorItem::setFormEditorVisible(bool isVisible)
+{
+    m_isFormEditorVisible = isVisible;
+    setVisible(isVisible);
+}
+
 FormEditorItem::~FormEditorItem()
 {
    scene()->removeItemFromHash(this);
diff --git a/src/plugins/qmldesigner/components/formeditor/formeditoritem.h b/src/plugins/qmldesigner/components/formeditor/formeditoritem.h
index 0232dd18a98862e849e65549e5c198630e068538..b3874cabf136e99e248833dd433eed5398bc7ac2 100644
--- a/src/plugins/qmldesigner/components/formeditor/formeditoritem.h
+++ b/src/plugins/qmldesigner/components/formeditor/formeditoritem.h
@@ -106,6 +106,9 @@ public:
     void setContentVisible(bool visible);
     bool isContentVisible() const;
 
+    bool isFormEditorVisible() const;
+    void setFormEditorVisible(bool isVisible);
+
 protected:
     AbstractFormEditorTool* tool() const;
     void paintBoundingRect(QPainter *painter) const;
@@ -129,6 +132,7 @@ private: // variables
     double m_borderWidth;
     bool m_highlightBoundingRect;
     bool m_isContentVisible;
+    bool m_isFormEditorVisible;
 };
 
 
diff --git a/src/plugins/qmldesigner/components/formeditor/formeditorview.cpp b/src/plugins/qmldesigner/components/formeditor/formeditorview.cpp
index a2ed9a85548df68686f54b923db75bf61fa38d11..e0ed591c4be0aea1e49b5b4959df55bb05d24862 100644
--- a/src/plugins/qmldesigner/components/formeditor/formeditorview.cpp
+++ b/src/plugins/qmldesigner/components/formeditor/formeditorview.cpp
@@ -131,6 +131,41 @@ void FormEditorView::setupFormEditorItemTree(const QmlItemNode &qmlItemNode)
             setupFormEditorItemTree(nextNode.toQmlItemNode());
 }
 
+void FormEditorView::removeNodeFromScene(const QmlItemNode &qmlItemNode)
+{
+    if (qmlItemNode.isValid()) {
+
+        FormEditorItem *item = m_scene->itemForQmlItemNode(qmlItemNode);
+
+        QList<QmlItemNode> nodeList;
+        nodeList.append(qmlItemNode.allSubModelNodes());
+        nodeList.append(qmlItemNode);
+
+        QList<FormEditorItem*> removedItemList;
+        removedItemList.append(scene()->itemsForQmlItemNodes(nodeList));
+        m_currentTool->itemsAboutToRemoved(removedItemList);
+
+        qDeleteAll(removedItemList);
+    }
+}
+
+void FormEditorView::hideNodeFromScene(const QmlItemNode &qmlItemNode)
+{
+    if (qmlItemNode.isValid()) {
+
+        FormEditorItem *item = m_scene->itemForQmlItemNode(qmlItemNode);
+
+        QList<QmlItemNode> nodeList;
+        nodeList.append(qmlItemNode.allSubModelNodes());
+        nodeList.append(qmlItemNode);
+
+        QList<FormEditorItem*> removedItemList;
+        removedItemList.append(scene()->itemsForQmlItemNodes(nodeList));
+        m_currentTool->itemsAboutToRemoved(removedItemList);
+        item->setFormEditorVisible(false);
+    }
+}
+
 void FormEditorView::nodeCreated(const ModelNode &createdNode)
 {
     QmlModelView::nodeCreated(createdNode);
@@ -164,20 +199,7 @@ void FormEditorView::nodeAboutToBeRemoved(const ModelNode &removedNode)
 {
     QmlItemNode qmlItemNode(removedNode);
 
-    if (qmlItemNode.isValid()) {
-
-        FormEditorItem *item = m_scene->itemForQmlItemNode(qmlItemNode);
-
-        QList<QmlItemNode> nodeList;
-        nodeList.append(qmlItemNode.allSubModelNodes());
-        nodeList.append(qmlItemNode);
-
-        QList<FormEditorItem*> removedItemList;
-        removedItemList.append(scene()->itemsForQmlItemNodes(nodeList));
-        m_currentTool->itemsAboutToRemoved(removedItemList);
-
-        delete item;
-    }
+    removeNodeFromScene(qmlItemNode);
 
     QmlModelView::nodeAboutToBeRemoved(removedNode);
 }
@@ -227,8 +249,23 @@ void FormEditorView::propertiesAboutToBeRemoved(const QList<AbstractProperty>& p
 
     QmlModelView::propertiesAboutToBeRemoved(propertyList);
 }
+
+static inline bool hasNodeSourceParent(const ModelNode &node)
+{
+    if (node.parentProperty().isValid() && node.parentProperty().parentModelNode().isValid()) {
+        ModelNode parent = node.parentProperty().parentModelNode();
+        if (parent.nodeSourceType() != ModelNode::NodeWithoutSource)
+            return true;
+        return hasNodeSourceParent(parent);
+    }
+    return false;
+}
+
 void FormEditorView::nodeReparented(const ModelNode &node, const NodeAbstractProperty &newPropertyParent, const NodeAbstractProperty &oldPropertyParent, AbstractView::PropertyChangeFlags propertyChange)
 {
+    if (hasNodeSourceParent(node))
+        hideNodeFromScene(node);
+
     QmlModelView::nodeReparented(node, newPropertyParent, oldPropertyParent, propertyChange);
 }
 
@@ -435,7 +472,8 @@ void FormEditorView::auxiliaryDataChanged(const ModelNode &node, const QString &
     if (name == "invisible" && m_scene->hasItemForQmlItemNode(QmlItemNode(node))) {
         FormEditorItem *item(m_scene->itemForQmlItemNode(QmlItemNode(node)));
         bool isInvisible = data.toBool();
-        item->setVisible(!isInvisible);
+        if (item->isFormEditorVisible())
+            item->setVisible(!isInvisible);
         ModelNode newNode(node);
         if (isInvisible)
             newNode.deselectNode();
diff --git a/src/plugins/qmldesigner/components/formeditor/formeditorview.h b/src/plugins/qmldesigner/components/formeditor/formeditorview.h
index b723c4bcef324fd76ff13e8572a490306bde37d2..7b6bebdc64939233472f1873de0462209631754b 100644
--- a/src/plugins/qmldesigner/components/formeditor/formeditorview.h
+++ b/src/plugins/qmldesigner/components/formeditor/formeditorview.h
@@ -137,7 +137,8 @@ protected slots:
 
 private: //functions
     void setupFormEditorItemTree(const QmlItemNode &qmlItemNode);
-
+    void removeNodeFromScene(const QmlItemNode &qmlItemNode);
+    void hideNodeFromScene(const QmlItemNode &qmlItemNode);
 
 private: //variables
     QWeakPointer<FormEditorWidget> m_formEditorWidget;