diff --git a/src/plugins/qmldesigner/components/navigator/navigatortreemodel.cpp b/src/plugins/qmldesigner/components/navigator/navigatortreemodel.cpp
index d415f9672822b5651cd99a289361408b619c7045..6515a004ba7702a96b2c72c9d38998feeec2aeb3 100644
--- a/src/plugins/qmldesigner/components/navigator/navigatortreemodel.cpp
+++ b/src/plugins/qmldesigner/components/navigator/navigatortreemodel.cpp
@@ -277,14 +277,11 @@ void NavigatorTreeModel::handleChangedItem(QStandardItem *item)
             if (ModelNode::isValidId(item->text()))
                 node.setId(item->text());
             else {
-                QMessageBox errorDialog;
-                errorDialog.setModal(true);
-                errorDialog.setText(tr("Invalid id.\nOnly alphanumeric characters and underscore allowed.\nIds must begin with a lowercase letter."));
-                errorDialog.exec();
-
+                QMessageBox::warning(0,"Invalid Id",tr("Invalid id.\nOnly alphanumeric characters and underscore allowed.\nIds must begin with a lowercase letter."));
                 item->setText(node.id());
             }
         } catch (InvalidIdException &) {
+            QMessageBox::warning(0,"Invalid Id",tr("Item id must be unique."));
             item->setText(node.id());
         }
     } else if (item == itemRow.visibilityItem) {
@@ -456,6 +453,20 @@ bool NavigatorTreeModel::blockItemChangedSignal(bool block)
     return oldValue;
 }
 
+void NavigatorTreeModel::setId(const QModelIndex &index, const QString &id)
+{
+    ModelNode node = nodeForIndex(index);
+    ItemRow itemRow = itemRowForNode(node);
+    itemRow.idItem->setText(id);
+}
+
+void NavigatorTreeModel::setVisible(const QModelIndex &index, bool visible)
+{
+    ModelNode node = nodeForIndex(index);
+    ItemRow itemRow = itemRowForNode(node);
+    itemRow.visibilityItem->setCheckState(visible ? Qt::Checked : Qt::Unchecked);
+}
+
 
 }
 
diff --git a/src/plugins/qmldesigner/components/navigator/navigatortreemodel.h b/src/plugins/qmldesigner/components/navigator/navigatortreemodel.h
index bf86fb651eae52e9fbab4c82403284710ab8102c..9c9d86bb09d6a997639614a28a684840ce88b34c 100644
--- a/src/plugins/qmldesigner/components/navigator/navigatortreemodel.h
+++ b/src/plugins/qmldesigner/components/navigator/navigatortreemodel.h
@@ -107,6 +107,9 @@ public:
     void updateItemRow(const ModelNode &node);
     void updateItemRowOrder(const ModelNode &node);
 
+    void setId(const QModelIndex &index, const QString &id);
+    void setVisible(const QModelIndex &index, bool visible);
+
 private slots:
     void handleChangedItem(QStandardItem *item);
 
diff --git a/src/plugins/qmldesigner/components/navigator/navigatortreeview.cpp b/src/plugins/qmldesigner/components/navigator/navigatortreeview.cpp
index ccf407eb39d93f81e853e0cedbac9136a27fa9c0..19fb8c6715ad9b71e60d03b3c0de3831c4d99d74 100644
--- a/src/plugins/qmldesigner/components/navigator/navigatortreeview.cpp
+++ b/src/plugins/qmldesigner/components/navigator/navigatortreeview.cpp
@@ -36,6 +36,7 @@
 
 #include <nodeproperty.h>
 #include "metainfo.h"
+#include <QLineEdit>
 
 namespace QmlDesigner {
 
@@ -189,4 +190,30 @@ void IdItemDelegate::paint(QPainter *painter,
     painter->restore();
 }
 
+QWidget *IdItemDelegate::createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const
+{
+    return new QLineEdit(parent);
+}
+
+void IdItemDelegate::setEditorData(QWidget *editor, const QModelIndex &index) const
+{
+    ModelNode node = m_TreeModel->nodeForIndex(index);
+    QString value = node.id();
+
+    QLineEdit *lineEdit = static_cast<QLineEdit*>(editor);
+    lineEdit->setText(value);
+}
+
+void IdItemDelegate::setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const
+{
+    QLineEdit *lineEdit = static_cast<QLineEdit*>(editor);
+    m_TreeModel->setId(index,lineEdit->text());
+}
+
+void IdItemDelegate::updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &index) const
+{
+    QLineEdit *lineEdit = static_cast<QLineEdit*>(editor);
+    lineEdit->setGeometry(option.rect);
+}
+
 }
diff --git a/src/plugins/qmldesigner/components/navigator/navigatortreeview.h b/src/plugins/qmldesigner/components/navigator/navigatortreeview.h
index 16ce396df9e851d9a2c2fbedcc0dc1455072debb..303c805c453756903cd11b20eafe317bf55caa70 100644
--- a/src/plugins/qmldesigner/components/navigator/navigatortreeview.h
+++ b/src/plugins/qmldesigner/components/navigator/navigatortreeview.h
@@ -78,6 +78,11 @@ class IdItemDelegate : public QStyledItemDelegate
     void paint(QPainter *painter,
                const QStyleOptionViewItem &option, const QModelIndex &index) const;
 
+    QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const;
+    void setEditorData(QWidget *editor, const QModelIndex &index) const;
+    void setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const;
+    void updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &index) const;
+
     private:
     NavigatorTreeModel *m_TreeModel;
 };