diff --git a/src/plugins/qmldesigner/components/navigator/navigatortreemodel.cpp b/src/plugins/qmldesigner/components/navigator/navigatortreemodel.cpp
index 4cf4a250c0ff445379b4096e53691a9187e8a8f0..959ed213b582847ca909cdcf02eda640a45252d2 100644
--- a/src/plugins/qmldesigner/components/navigator/navigatortreemodel.cpp
+++ b/src/plugins/qmldesigner/components/navigator/navigatortreemodel.cpp
@@ -40,7 +40,8 @@
 namespace QmlDesigner {
 
 NavigatorTreeModel::NavigatorTreeModel(QObject *parent)
-    : QStandardItemModel(parent)
+    : QStandardItemModel(parent),
+      m_blockItemChangedSignal(false)
 {
     invisibleRootItem()->setFlags(Qt::NoItemFlags);
 
@@ -205,9 +206,13 @@ NavigatorTreeModel::ItemRow NavigatorTreeModel::createItemRow(const ModelNode &n
 
 void NavigatorTreeModel::updateItemRow(const ModelNode &node, ItemRow items)
 {
+    bool blockSignal = blockItemChangedSignal(true);
+
     items.idItem->setText(node.id());
     items.typeItem->setText(node.simplifiedTypeName());
     items.visibilityItem->setCheckState(node.auxiliaryData("invisible").toBool() ? Qt::Unchecked : Qt::Checked);
+
+    blockItemChangedSignal(blockSignal);
 }
 
 /**
@@ -217,6 +222,7 @@ void NavigatorTreeModel::updateItemRow(const ModelNode &node)
 {
     if (!containsNode(node))
         return;
+
     updateItemRow(node, itemRowForNode(node));
 }
 
@@ -227,6 +233,7 @@ void NavigatorTreeModel::updateItemRowOrder(const ModelNode &node)
 {
     if (!containsNode(node))
         return;
+
     ItemRow itemRow = itemRowForNode(node);
     int currentRow = itemRow.idItem->row();
     int newRow = currentRow;
@@ -243,6 +250,9 @@ void NavigatorTreeModel::updateItemRowOrder(const ModelNode &node)
 
 void NavigatorTreeModel::handleChangedItem(QStandardItem *item)
 {
+    if (m_blockItemChangedSignal)
+        return;
+
     uint nodeHash = item->data(Qt::UserRole).toUInt();
     Q_ASSERT(nodeHash && containsNodeHash(nodeHash));
     ModelNode node = nodeForHash(nodeHash);
@@ -394,5 +404,14 @@ QList<ModelNode> NavigatorTreeModel::modelNodeChildren(const ModelNode &parentNo
     return children;
 }
 
+// along the lines of QObject::blockSignals
+bool NavigatorTreeModel::blockItemChangedSignal(bool block)
+{
+    bool oldValue = m_blockItemChangedSignal;
+    m_blockItemChangedSignal = block;
+    return oldValue;
+}
+
+
 }
 
diff --git a/src/plugins/qmldesigner/components/navigator/navigatortreemodel.h b/src/plugins/qmldesigner/components/navigator/navigatortreemodel.h
index d4212ffd997c4cb39fab40470dde1c51d479f882..f03614a1bfe45ee18b00e20d11068a02481bf37c 100644
--- a/src/plugins/qmldesigner/components/navigator/navigatortreemodel.h
+++ b/src/plugins/qmldesigner/components/navigator/navigatortreemodel.h
@@ -103,11 +103,14 @@ private:
 
     QList<ModelNode> modelNodeChildren(const ModelNode &parentNode);
 
-private:
+    bool blockItemChangedSignal(bool block);
 
+private:
     QHash<ModelNode, ItemRow> m_nodeItemHash;
     QHash<uint, ModelNode> m_nodeHash;
     QWeakPointer<AbstractView> m_view;
+
+    bool m_blockItemChangedSignal;
 };
 
 } // namespace QmlDesigner