diff --git a/src/plugins/qmldesigner/designercore/exceptions/invalididexception.cpp b/src/plugins/qmldesigner/designercore/exceptions/invalididexception.cpp
index b56c2f0dc39d2b75afe89dfc77beaf1edceed528..39b7c983520458cedac1dbf6a37f4ccab8aca860 100644
--- a/src/plugins/qmldesigner/designercore/exceptions/invalididexception.cpp
+++ b/src/plugins/qmldesigner/designercore/exceptions/invalididexception.cpp
@@ -36,34 +36,36 @@ InvalidIdException::InvalidIdException(int line,
                                        const QString &function,
                                        const QString &file,
                                        const QString &id,
-                                       bool duplicate) :
-    InvalidArgumentException(line, function, file, "id"), m_id(id), m_duplicate(duplicate)
+                                       Reason reason) :
+    InvalidArgumentException(line, function, file, "id"),
+    m_id(id)
 {
+    if (reason == InvalidCharacters) {
+        m_description = QCoreApplication::translate("InvalidIdException", "Only alphanumeric characters and underscore allowed.\nIds must begin with a lowercase letter.");
+    } else {
+        m_description = QCoreApplication::translate("InvalidIdException", "Ids have to be unique.");
+    }
 }
 
-QString InvalidIdException::type() const
-{
-    return "InvalidIdException";
-}
-
-QString InvalidIdException::description() const
+InvalidIdException::InvalidIdException(int line,
+                                       const QString &function,
+                                       const QString &file,
+                                       const QString &id,
+                                       const QString &description) :
+    InvalidArgumentException(line, function, file, "id"),
+    m_id(id),
+    m_description(description)
 {
-    if (m_duplicate)
-        return duplicateErrorMessage(m_id);
-
-    return invalidErrorMessage(m_id);
 }
 
-QString InvalidIdException::duplicateErrorMessage(const QString &id)
+QString InvalidIdException::type() const
 {
-     return QCoreApplication::translate("InvalidIdException", "Ids have to be unique: ") + id;
+    return "InvalidIdException";
 }
 
-QString InvalidIdException::invalidErrorMessage(const QString &id)
+QString InvalidIdException::description() const
 {
-    return QCoreApplication::translate("InvalidIdException", "Invalid Id: ") + 
-      id + QCoreApplication::translate("InvalidIdException", 
-      "\nOnly alphanumeric characters and underscore allowed.\nIds must begin with a lowercase letter.");
+    return QCoreApplication::translate("InvalidIdException", "Invalid Id: %1\n%2").arg(m_id, m_description);
 }
 
 }
diff --git a/src/plugins/qmldesigner/designercore/include/invalididexception.h b/src/plugins/qmldesigner/designercore/include/invalididexception.h
index f9e367692ffeb61333c29ca7720c0f5179ca38a8..2431710e07c275f4e2a13b7add48e3ec80d2d999 100644
--- a/src/plugins/qmldesigner/designercore/include/invalididexception.h
+++ b/src/plugins/qmldesigner/designercore/include/invalididexception.h
@@ -37,22 +37,26 @@ namespace QmlDesigner {
 class CORESHARED_EXPORT InvalidIdException : public InvalidArgumentException
 {
 public:
+    enum Reason { InvalidCharacters, DuplicateId };
+
+    InvalidIdException(int line,
+                       const QString &function,
+                       const QString &file,
+                       const QString &id,
+                       Reason reason);
+
     InvalidIdException(int line,
                        const QString &function,
                        const QString &file,
                        const QString &id,
-                       bool duplicate = false);
+                       const QString &description);
 
     QString type() const;
     QString description() const;
 
-    static QString duplicateErrorMessage(const QString &id);
-    static QString invalidErrorMessage(const QString &id);
-
 private:
     QString m_id;
-    bool m_duplicate;
-
+    QString m_description;
 };
 
 }
diff --git a/src/plugins/qmldesigner/designercore/model/model.cpp b/src/plugins/qmldesigner/designercore/model/model.cpp
index 7c0bc1d90f2f656b0c55db5d4f55b53ed013b622..dc66a9c97055a0030ef534eeeefaa16aa83642fb 100644
--- a/src/plugins/qmldesigner/designercore/model/model.cpp
+++ b/src/plugins/qmldesigner/designercore/model/model.cpp
@@ -65,6 +65,7 @@
 #include "rewritertransaction.h"
 #include "rewriterview.h"
 #include "rewritingexception.h"
+#include "invalididexception.h"
 
 /*!
 \defgroup CoreModel
@@ -259,7 +260,12 @@ void ModelPrivate::changeNodeId(const InternalNode::Pointer& internalNodePointer
         m_idNodeHash.remove(oldId);
     if (!id.isEmpty())
         m_idNodeHash.insert(id, internalNodePointer);
-    notifyNodeIdChanged(internalNodePointer, id, oldId);
+
+    try {
+        notifyNodeIdChanged(internalNodePointer, id, oldId);
+    } catch (RewritingException &e) {
+        throw InvalidIdException(__LINE__, __FUNCTION__, __FILE__, id, e.description());
+    }
 }
 
 void ModelPrivate::checkPropertyName(const QString &propertyName)
diff --git a/src/plugins/qmldesigner/designercore/model/modelnode.cpp b/src/plugins/qmldesigner/designercore/model/modelnode.cpp
index 722f93777f38dcef1124199f1efcde75dbfe5606..042049b4f9ee1d8fccbab4a01a068b45f28dc89a 100644
--- a/src/plugins/qmldesigner/designercore/model/modelnode.cpp
+++ b/src/plugins/qmldesigner/designercore/model/modelnode.cpp
@@ -180,13 +180,13 @@ void ModelNode::setId(const QString& id)
     }
 
     if (!isValidId(id))
-        throw InvalidIdException(__LINE__, __FUNCTION__, __FILE__, id);
+        throw InvalidIdException(__LINE__, __FUNCTION__, __FILE__, id, InvalidIdException::InvalidCharacters);
 
     if (id == ModelNode::id())
         return;
 
     if (view()->hasId(id))
-        throw InvalidIdException(__LINE__, __FUNCTION__, __FILE__, id, true);
+        throw InvalidIdException(__LINE__, __FUNCTION__, __FILE__, id, InvalidIdException::DuplicateId);
 
     m_model.data()->m_d->changeNodeId(internalNode(), id);
 }