diff --git a/src/plugins/qmldesigner/core/exceptions/rewritingexception.cpp b/src/plugins/qmldesigner/core/exceptions/rewritingexception.cpp
index fc07ecc90b4cf4191a65e18ecb62bfecd7c465af..580b1e9956187fa96dbd8809be8efe2cd31c5c92 100644
--- a/src/plugins/qmldesigner/core/exceptions/rewritingexception.cpp
+++ b/src/plugins/qmldesigner/core/exceptions/rewritingexception.cpp
@@ -4,8 +4,8 @@ using namespace QmlDesigner;
 
 RewritingException::RewritingException(int line,
                                        const QString &function,
-                                       const QString &file):
-        Exception(line, function, file)
+                                       const QString &file, const QString &description):
+        Exception(line, function, file), m_description(description)
 {
 }
 
@@ -13,3 +13,8 @@ QString RewritingException::type() const
 {
     return "RewritingException";
 }
+
+QString RewritingException::description() const
+{
+    return QLatin1String("Rewriting: ") + m_description;
+}
diff --git a/src/plugins/qmldesigner/core/include/rewritingexception.h b/src/plugins/qmldesigner/core/include/rewritingexception.h
index 984bc29e0f867493529eef026c4508f7ed25775e..dc20adc713c3b9f855a83dc3df12b7da1b282f77 100644
--- a/src/plugins/qmldesigner/core/include/rewritingexception.h
+++ b/src/plugins/qmldesigner/core/include/rewritingexception.h
@@ -10,9 +10,12 @@ class RewritingException: public Exception
 public:
     RewritingException(int line,
                        const QString &function,
-                       const QString &file);
+                       const QString &file, const QString &description);
 
     virtual QString type() const;
+    virtual QString description() const;
+private:
+    QString m_description;
 };
 
 } // namespace QmlDesigner
diff --git a/src/plugins/qmldesigner/core/model/model.cpp b/src/plugins/qmldesigner/core/model/model.cpp
index d22a2b75ac1ee454737192272510434ad824cac4..0e8ddb21eaa35de20d141d90908247f70c7dddc4 100644
--- a/src/plugins/qmldesigner/core/model/model.cpp
+++ b/src/plugins/qmldesigner/core/model/model.cpp
@@ -286,6 +286,7 @@ void ModelPrivate::checkPropertyName(const QString &propertyName)
 void ModelPrivate::notifyAuxiliaryDataChanged(const InternalNodePointer &internalNode, const QString &name, const QVariant &data)
 {
     bool resetModel = false;
+    QString description;
 
     foreach (const QWeakPointer<AbstractView> &view, m_viewList) {
         Q_ASSERT(view != 0);
@@ -293,19 +294,20 @@ void ModelPrivate::notifyAuxiliaryDataChanged(const InternalNodePointer &interna
         try {
             view->auxiliaryDataChanged(node, name, data);
         } catch (RewritingException &e) {
-            Q_UNUSED(e);
+            description = e.description();
             resetModel = true;
         }
     }
 
     if (resetModel) {
-        resetModelByRewriter();
+        resetModelByRewriter(description);
     }
 }
 
 void ModelPrivate::notifyNodeTypeChanged(const InternalNodePointer &internalNode, const QString &type, int majorVersion, int minorVersion)
 {
     bool resetModel = false;
+    QString description;
 
     foreach (const QWeakPointer<AbstractView> &view, m_viewList) {
         Q_ASSERT(view != 0);
@@ -313,19 +315,20 @@ void ModelPrivate::notifyNodeTypeChanged(const InternalNodePointer &internalNode
         try {
             view->nodeTypeChanged(node, type, majorVersion, minorVersion);
         } catch (RewritingException &e) {
-            Q_UNUSED(e);
+            description = e.description();
             resetModel = true;
         }
     }
 
     if (resetModel) {
-        resetModelByRewriter();
+        resetModelByRewriter(description);
     }
 }
 
 void ModelPrivate::notifyCustomNotification(const AbstractView *senderView, const QString &identifier, const QList<ModelNode> &nodeList, const QList<QVariant> &data)
 {
     bool resetModel = false;
+    QString description;
 
     QList<Internal::InternalNode::Pointer> internalList(toInternalNodeList(nodeList));
     foreach (const QWeakPointer<AbstractView> &view, m_viewList) {
@@ -333,13 +336,13 @@ void ModelPrivate::notifyCustomNotification(const AbstractView *senderView, cons
         try {
             view->customNotification(senderView, identifier, toModelNodeList(internalList, view.data()), data);
         } catch (RewritingException &e) {
-            Q_UNUSED(e);
+            description = e.description();
             resetModel = true;
         }
     }
 
     if (resetModel) {
-        resetModelByRewriter();
+        resetModelByRewriter(description);
     }
 }
 
@@ -347,6 +350,7 @@ void ModelPrivate::notifyCustomNotification(const AbstractView *senderView, cons
 void ModelPrivate::notifyPropertiesRemoved(const QList<PropertyPair> &propertyPairList)
 {
     bool resetModel = false;
+    QString description;
 
     foreach (const QWeakPointer<AbstractView> &view, m_viewList) {
         QList<AbstractProperty> propertyList;
@@ -358,19 +362,20 @@ void ModelPrivate::notifyPropertiesRemoved(const QList<PropertyPair> &propertyPa
         try {
             view->propertiesRemoved(propertyList);
         } catch (RewritingException &e) {
-            Q_UNUSED(e);
+            description = e.description();
             resetModel = true;
         }
     }
 
     if (resetModel) {
-        resetModelByRewriter();
+        resetModelByRewriter(description);
     }
 }
 
 void ModelPrivate::notifyPropertiesAboutToBeRemoved(const QList<InternalProperty::Pointer> &internalPropertyList)
 {
     bool resetModel = false;
+    QString description;
 
     foreach (const QWeakPointer<AbstractView> &view, m_viewList) {
         QList<AbstractProperty> propertyList;
@@ -382,13 +387,13 @@ void ModelPrivate::notifyPropertiesAboutToBeRemoved(const QList<InternalProperty
         try {
             view->propertiesAboutToBeRemoved(propertyList);
         } catch (RewritingException &e) {
-            Q_UNUSED(e);
+            description = e.description();
             resetModel = true;
         }
     }
 
     if (resetModel) {
-        resetModelByRewriter();
+        resetModelByRewriter(description);
     }
 }
 
@@ -398,7 +403,7 @@ void ModelPrivate::setAuxiliaryData(const InternalNode::Pointer& node, const QSt
     notifyAuxiliaryDataChanged(node, name,data);
 }
 
-void ModelPrivate::resetModelByRewriter()
+void ModelPrivate::resetModelByRewriter(const QString &description)
 {
     RewriterView* rewriterView = 0;
     foreach (const QWeakPointer<AbstractView> &view, m_viewList) {
@@ -407,7 +412,7 @@ void ModelPrivate::resetModelByRewriter()
     }
     Q_ASSERT(rewriterView);
     rewriterView->resetToLastCorrectQml();
-    throw RewritingException(__LINE__, __FUNCTION__, __FILE__);
+    throw RewritingException(__LINE__, __FUNCTION__, __FILE__, description);
 }
 
 
@@ -433,6 +438,7 @@ void ModelPrivate::notifyNodeCreated(const InternalNode::Pointer &newInternalNod
     Q_ASSERT(newInternalNodePointer->isValid());
 
     bool resetModel = false;
+    QString description;
 
     foreach (const QWeakPointer<AbstractView> &view, m_viewList) {
         Q_ASSERT(view != 0);
@@ -441,18 +447,19 @@ void ModelPrivate::notifyNodeCreated(const InternalNode::Pointer &newInternalNod
         try {
             view->nodeCreated(createdNode);
         } catch (RewritingException &e) {
-            Q_UNUSED(e);
+            description = e.description();
             resetModel = true;
         }
     }
     if (resetModel) {
-        resetModelByRewriter();
+        resetModelByRewriter(description);
     }
 }
 
 void ModelPrivate::notifyNodeAboutToBeRemoved(const InternalNode::Pointer &nodePointer)
 {
     bool resetModel = false;
+    QString description;
 
     foreach (const QWeakPointer<AbstractView> &view, m_viewList) {
         Q_ASSERT(view != 0);
@@ -460,18 +467,19 @@ void ModelPrivate::notifyNodeAboutToBeRemoved(const InternalNode::Pointer &nodeP
         try {
             view->nodeAboutToBeRemoved(node);
         } catch (RewritingException &e) {
-            Q_UNUSED(e);
+            description = e.description();
             resetModel = true;
         }
     }
     if (resetModel) {
-        resetModelByRewriter();
+        resetModelByRewriter(description);
     }
 }
 
 void ModelPrivate::notifyNodeRemoved(const InternalNodePointer &nodePointer, const InternalNodePointer &parentNodePointer, const QString &parentPropertyName, AbstractView::PropertyChangeFlags propertyChange)
 {
     bool resetModel = false;
+    QString description;
 
     foreach (const QWeakPointer<AbstractView> &view, m_viewList) {
         Q_ASSERT(view != 0);
@@ -480,18 +488,19 @@ void ModelPrivate::notifyNodeRemoved(const InternalNodePointer &nodePointer, con
         try {
             view->nodeRemoved(node, parentProperty, propertyChange);
         } catch (RewritingException &e) {
-            Q_UNUSED(e);
+            description = e.description();
             resetModel = true;
         }
     }
     if (resetModel) {
-        resetModelByRewriter();
+        resetModelByRewriter(description);
     }
 }
 
 void ModelPrivate::notifyNodeIdChanged(const InternalNode::Pointer& nodePointer, const QString& newId, const QString& oldId)
 {
     bool resetModel = false;
+    QString description;
 
     foreach (const QWeakPointer<AbstractView> &view, m_viewList) {
         Q_ASSERT(view != 0);
@@ -499,18 +508,19 @@ void ModelPrivate::notifyNodeIdChanged(const InternalNode::Pointer& nodePointer,
         try {
             view->nodeIdChanged(node, newId, oldId);
         } catch (RewritingException &e) {
-            Q_UNUSED(e);
+            description = e.description();
             resetModel = true;
         }
     }
     if (resetModel) {
-        resetModelByRewriter();
+        resetModelByRewriter(description);
     }
 }
 
 void ModelPrivate::notifyBindingPropertiesChanged(const QList<InternalBindingPropertyPointer> &internalBropertyList, AbstractView::PropertyChangeFlags propertyChange)
 {
     bool resetModel = false;
+    QString description;
 
     foreach (const QWeakPointer<AbstractView> &view, m_viewList) {
         QList<BindingProperty> propertyList;
@@ -521,18 +531,19 @@ void ModelPrivate::notifyBindingPropertiesChanged(const QList<InternalBindingPro
         try {
             view->bindingPropertiesChanged(propertyList, propertyChange);
         } catch (RewritingException &e) {
-            Q_UNUSED(e);
+            description = e.description();
             resetModel = true;
         }
     }
     if (resetModel) {
-        resetModelByRewriter();
+        resetModelByRewriter(description);
     }
 }
 
 void ModelPrivate::notifyVariantPropertiesChanged(const InternalNodePointer &internalNodePointer, const QStringList& propertyNameList, AbstractView::PropertyChangeFlags propertyChange)
 {
     bool resetModel = false;
+    QString description;
 
     foreach (const QWeakPointer<AbstractView> &view, m_viewList) {
         QList<VariantProperty> propertyList;
@@ -547,18 +558,19 @@ void ModelPrivate::notifyVariantPropertiesChanged(const InternalNodePointer &int
         try {
             view->variantPropertiesChanged(propertyList, propertyChange);
         } catch (RewritingException &e) {
-            Q_UNUSED(e);
+            description = e.description();
             resetModel = true;
         }
     }
     if (resetModel) {
-        resetModelByRewriter();
+        resetModelByRewriter(description);
     }
 }
 
 void ModelPrivate::notifyNodeReparent(const InternalNode::Pointer &internalNodePointer, const InternalNodeAbstractProperty::Pointer &newPropertyParent, const InternalNodePointer &oldParent, const QString &oldPropertyName, AbstractView::PropertyChangeFlags propertyChange)
 {
     bool resetModel = false;
+    QString description;
 
     foreach (const QWeakPointer<AbstractView> &view, m_viewList) {
         NodeAbstractProperty newProperty;
@@ -574,12 +586,12 @@ void ModelPrivate::notifyNodeReparent(const InternalNode::Pointer &internalNodeP
         try {
             view->nodeReparented(node, newProperty, oldProperty, propertyChange);
         } catch (RewritingException &e) {
-            Q_UNUSED(e);
+            description = e.description();
             resetModel = true;
         }
     }
     if (resetModel) {
-        resetModelByRewriter();
+        resetModelByRewriter(description);
     }
 }
 
@@ -588,6 +600,7 @@ void ModelPrivate::notifyNodeOrderChanged(const InternalNodeListPropertyPointer
                                           int oldIndex)
 {
     bool resetModel = false;
+    QString description;
 
     foreach (const QWeakPointer<AbstractView> &view, m_viewList) {
         Q_ASSERT(!view.isNull());
@@ -596,12 +609,12 @@ void ModelPrivate::notifyNodeOrderChanged(const InternalNodeListPropertyPointer
                                    ModelNode(internalNodePointer, model(), view.data()),
                                    oldIndex);
         } catch (RewritingException &e) {
-            Q_UNUSED(e);
+            description = e.description();
             resetModel = true;
         }
     }
     if (resetModel) {
-        resetModelByRewriter();
+        resetModelByRewriter(description);
     }
 }
 
diff --git a/src/plugins/qmldesigner/core/model/model_p.h b/src/plugins/qmldesigner/core/model/model_p.h
index 281646d459b7e82e98a8573ce37f5ffb033ea0cc..76b56615e31e5698a91182dc7559459aaca06803 100644
--- a/src/plugins/qmldesigner/core/model/model_p.h
+++ b/src/plugins/qmldesigner/core/model/model_p.h
@@ -136,7 +136,7 @@ public:
 
     void setRootNode(const InternalNodePointer& newRootNode);
     void setAuxiliaryData(const InternalNodePointer& node, const QString &name, const QVariant &data);
-    void resetModelByRewriter();
+    void resetModelByRewriter(const QString &description);
 
 
     // Imports:
diff --git a/src/plugins/qmldesigner/core/model/rewriterview.cpp b/src/plugins/qmldesigner/core/model/rewriterview.cpp
index b04e68c565f082844cd8c9045a60f0b0a709924f..a4814605d61fde9000091a16ee91d189c6d29549 100644
--- a/src/plugins/qmldesigner/core/model/rewriterview.cpp
+++ b/src/plugins/qmldesigner/core/model/rewriterview.cpp
@@ -395,7 +395,7 @@ void RewriterView::applyChanges()
 {
     if (errorState) {
         qDebug() << "RewriterView::applyChanges() got called while in error state. Will do a quick-exit now.";
-        throw RewritingException(__LINE__, __FUNCTION__, __FILE__);
+        throw RewritingException(__LINE__, __FUNCTION__, __FILE__, "RewriterView::applyChanges() already in error state");
     }
 
     bool success = false;
@@ -405,13 +405,11 @@ void RewriterView::applyChanges()
         if (!success) {
             errorState = true;
 
-            throw RewritingException(__LINE__, __FUNCTION__, __FILE__);
+            throw RewritingException(__LINE__, __FUNCTION__, __FILE__, errors().first().description());
         }
     } catch (Exception &e) {
-        Q_UNUSED(e);
         errorState = true;
-
-        throw RewritingException(__LINE__, __FUNCTION__, __FILE__);
+        throw RewritingException(__LINE__, __FUNCTION__, __FILE__, e.description());
     }
 }