diff --git a/src/plugins/qmldesigner/components/componentcore/modelnodeoperations.cpp b/src/plugins/qmldesigner/components/componentcore/modelnodeoperations.cpp
index 0203f287f61b1a14568e26e9ef436a7834878064..706423e044b6451c3fc7a825b00492aa06ed7eda 100644
--- a/src/plugins/qmldesigner/components/componentcore/modelnodeoperations.cpp
+++ b/src/plugins/qmldesigner/components/componentcore/modelnodeoperations.cpp
@@ -32,6 +32,7 @@
 
 #include <cmath>
 #include <QMessageBox>
+#include <QByteArray>
 #include <nodeabstractproperty.h>
 #include <nodemetainfo.h>
 #include <modelnode.h>
@@ -211,7 +212,7 @@ void raise(const SelectionContext &selectionState)
         return;
 
     try {
-        RewriterTransaction transaction(selectionState.view());
+        RewriterTransaction transaction(selectionState.view(), QByteArrayLiteral("DesignerActionManager|raise"));
         foreach (ModelNode modelNode, selectionState.selectedModelNodes()) {
             QmlItemNode node = modelNode;
             if (node.isValid()) {
@@ -232,7 +233,7 @@ void lower(const SelectionContext &selectionState)
         return;
 
     try {
-        RewriterTransaction transaction(selectionState.view());
+        RewriterTransaction transaction(selectionState.view(), QByteArrayLiteral("DesignerActionManager|lower"));
         foreach (ModelNode modelNode, selectionState.selectedModelNodes()) {
             QmlItemNode node = modelNode;
             if (node.isValid()) {
@@ -302,7 +303,7 @@ void resetSize(const SelectionContext &selectionState)
         return;
 
     try {
-        RewriterTransaction transaction(selectionState.view());
+        RewriterTransaction transaction(selectionState.view(), QByteArrayLiteral("DesignerActionManager|resetSize"));
         foreach (ModelNode node, selectionState.selectedModelNodes()) {
             node.removeProperty("width");
             node.removeProperty("height");
@@ -318,7 +319,7 @@ void resetPosition(const SelectionContext &selectionState)
         return;
 
     try {
-        RewriterTransaction transaction(selectionState.view());
+        RewriterTransaction transaction(selectionState.view(), QByteArrayLiteral("DesignerActionManager|resetPosition"));
         foreach (ModelNode node, selectionState.selectedModelNodes()) {
             node.removeProperty("x");
             node.removeProperty("y");
@@ -342,7 +343,7 @@ void resetZ(const SelectionContext &selectionState)
     if (!selectionState.view())
         return;
 
-    RewriterTransaction transaction(selectionState.view());
+    RewriterTransaction transaction(selectionState.view(), QByteArrayLiteral("DesignerActionManager|resetZ"));
     foreach (ModelNode node, selectionState.selectedModelNodes()) {
         node.removeProperty("z");
     }
@@ -373,7 +374,7 @@ void anchorsFill(const SelectionContext &selectionState)
     if (!selectionState.view())
         return;
 
-    RewriterTransaction transaction(selectionState.view());
+    RewriterTransaction transaction(selectionState.view(), QByteArrayLiteral("DesignerActionManager|anchorsFill"));
 
     ModelNode modelNode = selectionState.currentSingleSelectedNode();
 
@@ -392,7 +393,7 @@ void anchorsReset(const SelectionContext &selectionState)
     if (!selectionState.view())
         return;
 
-    RewriterTransaction transaction(selectionState.view());
+    RewriterTransaction transaction(selectionState.view(), QByteArrayLiteral("DesignerActionManager|anchorsReset"));
 
     ModelNode modelNode = selectionState.currentSingleSelectedNode();
 
@@ -458,7 +459,7 @@ static void layoutHelperFunction(const SelectionContext &selectionContext,
 
             ModelNode layoutNode;
             {
-                RewriterTransaction transaction(selectionContext.view());
+                RewriterTransaction transaction(selectionContext.view(), QByteArrayLiteral("DesignerActionManager|layoutHelperFunction1"));
 
                 QmlItemNode parentNode = qmlItemNode.instanceParentItem();
 
@@ -470,7 +471,7 @@ static void layoutHelperFunction(const SelectionContext &selectionContext,
             }
 
             {
-                RewriterTransaction transaction(selectionContext.view());
+                RewriterTransaction transaction(selectionContext.view(), QByteArrayLiteral("DesignerActionManager|layoutHelperFunction2"));
 
                 QList<ModelNode> sortedSelectedNodes =  selectionContext.selectedModelNodes();
                 qSort(sortedSelectedNodes.begin(), sortedSelectedNodes.end(), lessThan);
diff --git a/src/plugins/qmldesigner/components/formeditor/dragtool.cpp b/src/plugins/qmldesigner/components/formeditor/dragtool.cpp
index 20c1db6b19c57d22f3de786a87aa9bc11ee0bc1e..b4a342d76ef9f09d2032afcaf4466d1015b54afe 100644
--- a/src/plugins/qmldesigner/components/formeditor/dragtool.cpp
+++ b/src/plugins/qmldesigner/components/formeditor/dragtool.cpp
@@ -321,7 +321,7 @@ void DragTool::dragEnterEvent(QGraphicsSceneDragDropEvent * event)
 
         if (!m_rewriterTransaction.isValid()) {
             view()->clearSelectedModelNodes();
-            m_rewriterTransaction = view()->beginRewriterTransaction();
+            m_rewriterTransaction = view()->beginRewriterTransaction(QByteArrayLiteral("DragTool::dragEnterEvent"));
         }
     }
 }
diff --git a/src/plugins/qmldesigner/components/formeditor/movemanipulator.cpp b/src/plugins/qmldesigner/components/formeditor/movemanipulator.cpp
index 4ac274afc7420e7e27edb017d1388e4ea2b1b89c..b295763f81dc46b3af1cd6e9a5b75910d90c49b2 100644
--- a/src/plugins/qmldesigner/components/formeditor/movemanipulator.cpp
+++ b/src/plugins/qmldesigner/components/formeditor/movemanipulator.cpp
@@ -159,7 +159,7 @@ void MoveManipulator::begin(const QPointF &beginPoint)
 
 //    setOpacityForAllElements(0.62);
 
-    m_rewriterTransaction = m_view->beginRewriterTransaction();
+    m_rewriterTransaction = m_view->beginRewriterTransaction(QByteArrayLiteral("MoveManipulator::begin"));
 }
 
 
@@ -421,7 +421,7 @@ void MoveManipulator::moveBy(double deltaX, double deltaY)
 
 void MoveManipulator::beginRewriterTransaction()
 {
-    m_rewriterTransaction = m_view->beginRewriterTransaction();
+    m_rewriterTransaction = m_view->beginRewriterTransaction(QByteArrayLiteral("MoveManipulator::beginRewriterTransaction"));
 }
 
 void MoveManipulator::endRewriterTransaction()
diff --git a/src/plugins/qmldesigner/components/formeditor/resizemanipulator.cpp b/src/plugins/qmldesigner/components/formeditor/resizemanipulator.cpp
index a872e4b0906181df0c5ad2c565cda2d3b843f98f..698cb7d8ccf350ecd6999da6455477e3daecd74b 100644
--- a/src/plugins/qmldesigner/components/formeditor/resizemanipulator.cpp
+++ b/src/plugins/qmldesigner/components/formeditor/resizemanipulator.cpp
@@ -81,7 +81,7 @@ void ResizeManipulator::begin(const QPointF &/*beginPoint*/)
         m_beginFromSceneToContentItemTransform = m_beginFromContentItemToSceneTransform.inverted();
         m_beginFromItemToSceneTransform = m_resizeController.formEditorItem()->qmlItemNode().instanceSceneTransform();
         m_beginToParentTransform = m_resizeController.formEditorItem()->qmlItemNode().instanceTransform();
-        m_rewriterTransaction = m_view->beginRewriterTransaction();
+        m_rewriterTransaction = m_view->beginRewriterTransaction(QByteArrayLiteral("ResizeManipulator::begin"));
         m_snapper.updateSnappingLines(m_resizeController.formEditorItem());
         m_beginBottomRightPoint = m_beginToParentTransform.map(m_resizeController.formEditorItem()->qmlItemNode().instanceBoundingRect().bottomRight());
 
diff --git a/src/plugins/qmldesigner/components/integration/designdocument.cpp b/src/plugins/qmldesigner/components/integration/designdocument.cpp
index 0745710faef649f9077eeee11decdcb565b9264c..f909de823c965e66cec540931ef99997714f6b69 100644
--- a/src/plugins/qmldesigner/components/integration/designdocument.cpp
+++ b/src/plugins/qmldesigner/components/integration/designdocument.cpp
@@ -356,7 +356,7 @@ void DesignDocument::deleteSelected()
         return;
 
     try {
-        RewriterTransaction transaction(rewriterView());
+        RewriterTransaction transaction(rewriterView(), QByteArrayLiteral("DesignDocument::deleteSelected"));
         QList<ModelNode> toDelete = view()->selectedModelNodes();
         foreach (ModelNode node, toDelete) {
             if (node.isValid() && !node.isRootNode() && QmlObjectNode::isValidQmlObjectNode(node))
@@ -511,7 +511,7 @@ void DesignDocument::paste()
         QList<ModelNode> pastedNodeList;
 
         try {
-            RewriterTransaction transaction(rewriterView());
+            RewriterTransaction transaction(rewriterView(), QByteArrayLiteral("DesignDocument::paste1"));
 
             int offset = double(qrand()) / RAND_MAX * 20 - 10;
 
@@ -529,7 +529,7 @@ void DesignDocument::paste()
         }
     } else {
         try {
-            RewriterTransaction transaction(rewriterView());
+            RewriterTransaction transaction(rewriterView(), QByteArrayLiteral("DesignDocument::paste2"));
 
             pasteModel->detachView(&view);
             currentModel()->attachView(&view);
diff --git a/src/plugins/qmldesigner/components/navigator/navigatortreemodel.cpp b/src/plugins/qmldesigner/components/navigator/navigatortreemodel.cpp
index 4973004b84e643ed3d500cd29e1c8e4fe1217e8f..5cfce7648059e29c51df14f1e25f80b7dc8e17b8 100644
--- a/src/plugins/qmldesigner/components/navigator/navigatortreemodel.cpp
+++ b/src/plugins/qmldesigner/components/navigator/navigatortreemodel.cpp
@@ -510,7 +510,7 @@ void NavigatorTreeModel::moveNodesInteractive(NodeAbstractProperty parentPropert
     try {
         TypeName propertyQmlType = qmlTypeInQtContainer(parentProperty.parentModelNode().metaInfo().propertyTypeName(parentProperty.name()));
 
-        RewriterTransaction transaction = m_view->beginRewriterTransaction();
+        RewriterTransaction transaction = m_view->beginRewriterTransaction(QByteArrayLiteral("NavigatorTreeModel::moveNodesInteractive"));
         foreach (const ModelNode &node, modelNodes) {
             if (!node.isValid())
                 continue;
diff --git a/src/plugins/qmldesigner/components/propertyeditor/gradientlineqmladaptor.cpp b/src/plugins/qmldesigner/components/propertyeditor/gradientlineqmladaptor.cpp
index 33c514b60ec49e78073a44b426919b08d4f25e36..c8dad8afa823d06c0945b1000cac0c0fd0670b9d 100644
--- a/src/plugins/qmldesigner/components/propertyeditor/gradientlineqmladaptor.cpp
+++ b/src/plugins/qmldesigner/components/propertyeditor/gradientlineqmladaptor.cpp
@@ -131,7 +131,7 @@ void GradientLineQmlAdaptor::writeGradient()
             ModelNode gradientNode= modelNode.view()->createModelNode("QtQuick.Gradient", modelNode.view()->majorQtQuickVersion(), 0);
             modelNode.nodeProperty(gradientName().toUtf8()).reparentHere(gradientNode);
 
-            RewriterTransaction transaction = m_itemNode.modelNode().view()->beginRewriterTransaction();
+            RewriterTransaction transaction = m_itemNode.modelNode().view()->beginRewriterTransaction(QByteArrayLiteral("GradientLineQmlAdaptor::writeGradient"));
 
             if (!oldId.isNull())
                 gradientNode.setId(oldId);
@@ -173,7 +173,7 @@ void GradientLineQmlAdaptor::deleteGradient()
 
     if (m_itemNode.isInBaseState()) {
         if (modelNode.hasProperty(gradientName().toUtf8())) {
-            RewriterTransaction transaction = m_itemNode.modelNode().view()->beginRewriterTransaction();
+            RewriterTransaction transaction = m_itemNode.modelNode().view()->beginRewriterTransaction(QByteArrayLiteral("GradientLineQmlAdaptor::deleteGradient"));
             ModelNode gradientNode = modelNode.nodeProperty(gradientName().toUtf8()).modelNode();
             if (QmlObjectNode(gradientNode).isValid())
                 QmlObjectNode(gradientNode).destroy();
diff --git a/src/plugins/qmldesigner/components/propertyeditor/gradientmodel.cpp b/src/plugins/qmldesigner/components/propertyeditor/gradientmodel.cpp
index ed5730f62d979bc3bb8c63348972baa514e7d4c5..7519448f83c07430c0acfdfccca7ecc4c3310c9f 100644
--- a/src/plugins/qmldesigner/components/propertyeditor/gradientmodel.cpp
+++ b/src/plugins/qmldesigner/components/propertyeditor/gradientmodel.cpp
@@ -143,7 +143,7 @@ void GradientModel::addGradient()
         if (!color.isValid())
             color = QColor(Qt::white);
 
-        QmlDesigner::RewriterTransaction transaction = m_itemNode.modelNode().view()->beginRewriterTransaction();
+        QmlDesigner::RewriterTransaction transaction = m_itemNode.modelNode().view()->beginRewriterTransaction(QByteArrayLiteral("GradientModel::addGradient"));
 
         QmlDesigner::ModelNode gradientNode =
                 m_itemNode.modelNode().view()->createModelNode("QtQuick.Gradient",
@@ -227,7 +227,7 @@ qreal GradientModel::getPosition(int index) const
 void GradientModel::removeStop(int index)
 {
     if (index < rowCount() - 1 && index != 0) {
-        QmlDesigner::RewriterTransaction transaction = m_itemNode.modelNode().view()->beginRewriterTransaction();
+        QmlDesigner::RewriterTransaction transaction = m_itemNode.modelNode().view()->beginRewriterTransaction(QByteArrayLiteral("GradientModel::removeStop"));
         QmlDesigner::ModelNode gradientNode =  m_itemNode.modelNode().nodeProperty(gradientPropertyName().toUtf8()).modelNode();
         QmlDesigner::QmlObjectNode stop = gradientNode.nodeListProperty("stops").toModelNodeList().at(index);
         if (stop.isValid()) {
@@ -251,7 +251,7 @@ void GradientModel::deleteGradient()
 
     if (m_itemNode.isInBaseState()) {
         if (modelNode.hasProperty(gradientPropertyName().toUtf8())) {
-            QmlDesigner::RewriterTransaction transaction = m_itemNode.modelNode().view()->beginRewriterTransaction();
+            QmlDesigner::RewriterTransaction transaction = m_itemNode.modelNode().view()->beginRewriterTransaction(QByteArrayLiteral("GradientModel::deleteGradient"));
             QmlDesigner::ModelNode gradientNode = modelNode.nodeProperty(gradientPropertyName().toUtf8()).modelNode();
             if (QmlDesigner::QmlObjectNode(gradientNode).isValid())
                 QmlDesigner::QmlObjectNode(gradientNode).destroy();
diff --git a/src/plugins/qmldesigner/components/propertyeditor/propertyeditortransaction.cpp b/src/plugins/qmldesigner/components/propertyeditor/propertyeditortransaction.cpp
index 11ebf5577781547fad888ee50ac3f10b3a5813c1..2efe488dc92a202a6359c1c90e7c1b34cb946edb 100644
--- a/src/plugins/qmldesigner/components/propertyeditor/propertyeditortransaction.cpp
+++ b/src/plugins/qmldesigner/components/propertyeditor/propertyeditortransaction.cpp
@@ -44,7 +44,7 @@ void PropertyEditorTransaction::start()
         return;
     if (m_rewriterTransaction.isValid())
         m_rewriterTransaction.commit();
-    m_rewriterTransaction = m_propertyEditor->beginRewriterTransaction();
+    m_rewriterTransaction = m_propertyEditor->beginRewriterTransaction(QByteArrayLiteral("PropertyEditorTransaction::start"));
     m_timerId = startTimer(4000);
 }
 
diff --git a/src/plugins/qmldesigner/components/propertyeditor/propertyeditorview.cpp b/src/plugins/qmldesigner/components/propertyeditor/propertyeditorview.cpp
index 4148a57e786d7619d4afcbc88a3b1f9454e95cba..2f698237bd0ade328b01f67e61bc79d6e5140b5e 100644
--- a/src/plugins/qmldesigner/components/propertyeditor/propertyeditorview.cpp
+++ b/src/plugins/qmldesigner/components/propertyeditor/propertyeditorview.cpp
@@ -240,7 +240,7 @@ void PropertyEditorView::changeExpression(const QString &propertyName)
     if (m_locked)
         return;
 
-    RewriterTransaction transaction = beginRewriterTransaction();
+    RewriterTransaction transaction = beginRewriterTransaction(QByteArrayLiteral("PropertyEditorView::changeExpression"));
 
     try {
         PropertyName underscoreName(name);
diff --git a/src/plugins/qmldesigner/components/propertyeditor/qmlanchorbindingproxy.cpp b/src/plugins/qmldesigner/components/propertyeditor/qmlanchorbindingproxy.cpp
index ac3bde0cdfae101dfd7ec33bf5a17cf06623747c..16aca7ee4ce052283d7b44e8ec222cc03b75602c 100644
--- a/src/plugins/qmldesigner/components/propertyeditor/qmlanchorbindingproxy.cpp
+++ b/src/plugins/qmldesigner/components/propertyeditor/qmlanchorbindingproxy.cpp
@@ -268,7 +268,7 @@ void QmlAnchorBindingProxy::setTopTarget(const QString &target)
     if (!newTarget.isValid())
         return;
 
-    RewriterTransaction transaction = m_qmlItemNode.modelNode().view()->beginRewriterTransaction();
+    RewriterTransaction transaction = m_qmlItemNode.modelNode().view()->beginRewriterTransaction(QByteArrayLiteral("QmlAnchorBindingProxy::setTopTarget"));
 
     m_topTarget = newTarget;
     calcTopMargin();
@@ -293,7 +293,7 @@ void QmlAnchorBindingProxy::setBottomTarget(const QString &target)
     if (!newTarget.isValid())
         return;
 
-    RewriterTransaction transaction = m_qmlItemNode.modelNode().view()->beginRewriterTransaction();
+    RewriterTransaction transaction = m_qmlItemNode.modelNode().view()->beginRewriterTransaction(QByteArrayLiteral("QmlAnchorBindingProxy::setBottomTarget"));
 
     m_bottomTarget = newTarget;
     calcBottomMargin();
@@ -314,7 +314,7 @@ void QmlAnchorBindingProxy::setLeftTarget(const QString &target)
     if (!newTarget.isValid())
         return;
 
-    RewriterTransaction transaction = m_qmlItemNode.modelNode().view()->beginRewriterTransaction();
+    RewriterTransaction transaction = m_qmlItemNode.modelNode().view()->beginRewriterTransaction(QByteArrayLiteral("QmlAnchorBindingProxy::setLeftTarget"));
 
     m_leftTarget = newTarget;
     calcLeftMargin();
@@ -335,7 +335,7 @@ void QmlAnchorBindingProxy::setRightTarget(const QString &target)
     if (!newTarget.isValid())
         return;
 
-    RewriterTransaction transaction = m_qmlItemNode.modelNode().view()->beginRewriterTransaction();
+    RewriterTransaction transaction = m_qmlItemNode.modelNode().view()->beginRewriterTransaction(QByteArrayLiteral("QmlAnchorBindingProxy::setRightTarget"));
 
     m_rightTarget = newTarget;
     calcRightMargin();
@@ -356,7 +356,7 @@ void QmlAnchorBindingProxy::setVerticalTarget(const QString &target)
     if (!newTarget.isValid())
         return;
 
-    RewriterTransaction transaction = m_qmlItemNode.modelNode().view()->beginRewriterTransaction();
+    RewriterTransaction transaction = m_qmlItemNode.modelNode().view()->beginRewriterTransaction(QByteArrayLiteral("QmlAnchorBindingProxy::setVerticalTarget"));
 
     m_verticalTarget = newTarget;
     m_qmlItemNode.anchors().setAnchor(AnchorLine::VerticalCenter, m_verticalTarget, AnchorLine::VerticalCenter);
@@ -377,7 +377,7 @@ void QmlAnchorBindingProxy::setHorizontalTarget(const QString &target)
     if (!newTarget.isValid())
         return;
 
-    RewriterTransaction transaction = m_qmlItemNode.modelNode().view()->beginRewriterTransaction();
+    RewriterTransaction transaction = m_qmlItemNode.modelNode().view()->beginRewriterTransaction(QByteArrayLiteral("QmlAnchorBindingProxy::setHorizontalTarget"));
 
     m_horizontalTarget = newTarget;
     m_qmlItemNode.anchors().setAnchor(AnchorLine::HorizontalCenter, m_horizontalTarget, AnchorLine::HorizontalCenter);
@@ -421,7 +421,7 @@ int QmlAnchorBindingProxy::indexOfPossibleTargetItem(const QString &targetName)
 }
 
 void QmlAnchorBindingProxy::resetLayout() {
-    RewriterTransaction transaction = m_qmlItemNode.modelNode().view()->beginRewriterTransaction();
+    RewriterTransaction transaction = m_qmlItemNode.modelNode().view()->beginRewriterTransaction(QByteArrayLiteral("QmlAnchorBindingProxy::resetLayout"));
 
         m_qmlItemNode.anchors().removeAnchors();
         m_qmlItemNode.anchors().removeMargins();
@@ -446,7 +446,7 @@ void QmlAnchorBindingProxy::setBottomAnchor(bool anchor)
     if (bottomAnchored() == anchor)
         return;
 
-    RewriterTransaction transaction = m_qmlItemNode.modelNode().view()->beginRewriterTransaction();
+    RewriterTransaction transaction = m_qmlItemNode.modelNode().view()->beginRewriterTransaction(QByteArrayLiteral("QmlAnchorBindingProxy::setBottomAnchor"));
 
     if (!anchor) {
         removeBottomAnchor();
@@ -469,7 +469,7 @@ void QmlAnchorBindingProxy::setLeftAnchor(bool anchor)
     if (leftAnchored() == anchor)
         return;
 
-    RewriterTransaction transaction = m_qmlItemNode.modelNode().view()->beginRewriterTransaction();
+    RewriterTransaction transaction = m_qmlItemNode.modelNode().view()->beginRewriterTransaction(QByteArrayLiteral("QmlAnchorBindingProxy::setLeftAnchor"));
 
     if (!anchor) {
         removeLeftAnchor();
@@ -493,7 +493,7 @@ void QmlAnchorBindingProxy::setRightAnchor(bool anchor)
     if (rightAnchored() == anchor)
         return;
 
-    RewriterTransaction transaction = m_qmlItemNode.modelNode().view()->beginRewriterTransaction();
+    RewriterTransaction transaction = m_qmlItemNode.modelNode().view()->beginRewriterTransaction(QByteArrayLiteral("QmlAnchorBindingProxy::setRightAnchor"));
 
     if (!anchor) {
         removeRightAnchor();
@@ -634,7 +634,7 @@ void QmlAnchorBindingProxy::setTopAnchor(bool anchor)
     if (topAnchored() == anchor)
         return;
 
-    RewriterTransaction transaction = m_qmlItemNode.modelNode().view()->beginRewriterTransaction();
+    RewriterTransaction transaction = m_qmlItemNode.modelNode().view()->beginRewriterTransaction(QByteArrayLiteral("QmlAnchorBindingProxy::setTopAnchor"));
 
     if (!anchor) {
         removeTopAnchor();
@@ -650,7 +650,7 @@ void QmlAnchorBindingProxy::setTopAnchor(bool anchor)
 }
 
 void QmlAnchorBindingProxy::removeTopAnchor() {
-    RewriterTransaction transaction = m_qmlItemNode.modelNode().view()->beginRewriterTransaction();
+    RewriterTransaction transaction = m_qmlItemNode.modelNode().view()->beginRewriterTransaction(QByteArrayLiteral("QmlAnchorBindingProxy::removeTopAnchor"));
 
     m_qmlItemNode.anchors().removeAnchor(AnchorLine::Top);
     m_qmlItemNode.anchors().removeMargin(AnchorLine::Top);
@@ -661,7 +661,7 @@ void QmlAnchorBindingProxy::removeTopAnchor() {
 }
 
 void QmlAnchorBindingProxy::removeBottomAnchor() {
-    RewriterTransaction transaction = m_qmlItemNode.modelNode().view()->beginRewriterTransaction();
+    RewriterTransaction transaction = m_qmlItemNode.modelNode().view()->beginRewriterTransaction(QByteArrayLiteral("QmlAnchorBindingProxy::removeBottomAnchor"));
 
     m_qmlItemNode.anchors().removeAnchor(AnchorLine::Bottom);
     m_qmlItemNode.anchors().removeMargin(AnchorLine::Bottom);
@@ -671,7 +671,7 @@ void QmlAnchorBindingProxy::removeBottomAnchor() {
 }
 
 void QmlAnchorBindingProxy::removeLeftAnchor() {
-    RewriterTransaction transaction = m_qmlItemNode.modelNode().view()->beginRewriterTransaction();
+    RewriterTransaction transaction = m_qmlItemNode.modelNode().view()->beginRewriterTransaction(QByteArrayLiteral("QmlAnchorBindingProxy::removeLeftAnchor"));
 
     m_qmlItemNode.anchors().removeAnchor(AnchorLine::Left);
     m_qmlItemNode.anchors().removeMargin(AnchorLine::Left);
@@ -681,7 +681,7 @@ void QmlAnchorBindingProxy::removeLeftAnchor() {
 }
 
 void QmlAnchorBindingProxy::removeRightAnchor() {
-    RewriterTransaction transaction = m_qmlItemNode.modelNode().view()->beginRewriterTransaction();
+    RewriterTransaction transaction = m_qmlItemNode.modelNode().view()->beginRewriterTransaction(QByteArrayLiteral("QmlAnchorBindingProxy::removeRightAnchor"));
 
     m_qmlItemNode.anchors().removeAnchor(AnchorLine::Right);
     m_qmlItemNode.anchors().removeMargin(AnchorLine::Right);
@@ -699,7 +699,7 @@ void QmlAnchorBindingProxy::setVerticalCentered(bool centered)
 
     m_locked = true;
 
-    RewriterTransaction transaction = m_qmlItemNode.modelNode().view()->beginRewriterTransaction();
+    RewriterTransaction transaction = m_qmlItemNode.modelNode().view()->beginRewriterTransaction(QByteArrayLiteral("QmlAnchorBindingProxy::setVerticalCentered"));
 
     if (!centered) {
         m_qmlItemNode.anchors().removeAnchor(AnchorLine::VerticalCenter);
@@ -723,7 +723,7 @@ void QmlAnchorBindingProxy::setHorizontalCentered(bool centered)
 
     m_locked = true;
 
-    RewriterTransaction transaction = m_qmlItemNode.modelNode().view()->beginRewriterTransaction();
+    RewriterTransaction transaction = m_qmlItemNode.modelNode().view()->beginRewriterTransaction(QByteArrayLiteral("QmlAnchorBindingProxy::setHorizontalCentered"));
 
     if (!centered) {
         m_qmlItemNode.anchors().removeAnchor(AnchorLine::HorizontalCenter);
@@ -780,7 +780,7 @@ bool QmlAnchorBindingProxy::horizontalCentered()
 void QmlAnchorBindingProxy::fill()
 {
 
-    RewriterTransaction transaction = m_qmlItemNode.modelNode().view()->beginRewriterTransaction();
+    RewriterTransaction transaction = m_qmlItemNode.modelNode().view()->beginRewriterTransaction(QByteArrayLiteral("QmlAnchorBindingProxy::fill"));
 
 
     backupPropertyAndRemove(modelNode(), "x");
diff --git a/src/plugins/qmldesigner/designercore/include/abstractview.h b/src/plugins/qmldesigner/designercore/include/abstractview.h
index b3e61fe1a0d253c494aa657ea37f95a689e0953d..83601826f134754ca5e78c08556484309d291c75 100644
--- a/src/plugins/qmldesigner/designercore/include/abstractview.h
+++ b/src/plugins/qmldesigner/designercore/include/abstractview.h
@@ -132,7 +132,7 @@ public:
     Model* model() const;
     bool isAttached() const;
 
-    RewriterTransaction beginRewriterTransaction();
+    RewriterTransaction beginRewriterTransaction(const QByteArray &identifier);
 
     ModelNode createModelNode(const TypeName &typeName,
                          int majorVersion,
diff --git a/src/plugins/qmldesigner/designercore/model/abstractview.cpp b/src/plugins/qmldesigner/designercore/model/abstractview.cpp
index 77373431c8d82836435a2a50db071993e9e77a35..d9463e3e743e3bf92c01eae66125869b0896168c 100644
--- a/src/plugins/qmldesigner/designercore/model/abstractview.cpp
+++ b/src/plugins/qmldesigner/designercore/model/abstractview.cpp
@@ -71,9 +71,9 @@ void AbstractView::setModel(Model *model)
     m_model = model;
 }
 
-RewriterTransaction AbstractView::beginRewriterTransaction()
+RewriterTransaction AbstractView::beginRewriterTransaction(const QByteArray &identifier)
 {
-    return RewriterTransaction(this);
+    return RewriterTransaction(this, identifier);
 }
 
 ModelNode AbstractView::createModelNode(const TypeName &typeName,
diff --git a/src/plugins/qmldesigner/designercore/model/modelmerger.cpp b/src/plugins/qmldesigner/designercore/model/modelmerger.cpp
index 1a73394c2114b4dea5520ce9e4d048c113c60594..ecb53a8c2ca248db8f2578b4eac9fdc744e5a4c1 100644
--- a/src/plugins/qmldesigner/designercore/model/modelmerger.cpp
+++ b/src/plugins/qmldesigner/designercore/model/modelmerger.cpp
@@ -154,7 +154,7 @@ static ModelNode createNodeFromNode(const ModelNode &modelNode,const QHash<QStri
 
 ModelNode ModelMerger::insertModel(const ModelNode &modelNode)
 {
-    RewriterTransaction transaction(view()->beginRewriterTransaction());
+    RewriterTransaction transaction(view()->beginRewriterTransaction(QByteArrayLiteral("ModelMerger::insertModel")));
 
     QList<Import> newImports;
 
@@ -179,7 +179,7 @@ void ModelMerger::replaceModel(const ModelNode &modelNode)
         view()->model()->setFileUrl(modelNode.model()->fileUrl());
 
     try {
-        RewriterTransaction transaction(view()->beginRewriterTransaction());
+        RewriterTransaction transaction(view()->beginRewriterTransaction(QByteArrayLiteral("ModelMerger::replaceModel")));
 
         ModelNode rootNode(view()->rootModelNode());
 
diff --git a/src/plugins/qmldesigner/designercore/model/qmlanchors.cpp b/src/plugins/qmldesigner/designercore/model/qmlanchors.cpp
index 9284c907f705444427d25125842c2d49d9daaef7..44b461a284ba06b773f75294253f131a8c88cacd 100644
--- a/src/plugins/qmldesigner/designercore/model/qmlanchors.cpp
+++ b/src/plugins/qmldesigner/designercore/model/qmlanchors.cpp
@@ -176,7 +176,7 @@ void QmlAnchors::setAnchor(AnchorLine::Type sourceAnchorLine,
                           const QmlItemNode &targetQmlItemNode,
                           AnchorLine::Type targetAnchorLine)
 {
-    RewriterTransaction transaction = qmlItemNode().view()->beginRewriterTransaction();
+    RewriterTransaction transaction = qmlItemNode().view()->beginRewriterTransaction(QByteArrayLiteral("QmlAnchors::setAnchor"));
     if (qmlItemNode().isInBaseState()) {
         if ((qmlItemNode().nodeInstance().hasAnchor("anchors.fill") && (sourceAnchorLine & AnchorLine::Fill))
              || ((qmlItemNode().nodeInstance().hasAnchor("anchors.centerIn") && (sourceAnchorLine & AnchorLine::Center)))) {
@@ -330,7 +330,7 @@ AnchorLine QmlAnchors::instanceAnchor(AnchorLine::Type sourceAnchorLine) const
 
 void QmlAnchors::removeAnchor(AnchorLine::Type sourceAnchorLine)
 {
-   RewriterTransaction transaction = qmlItemNode().view()->beginRewriterTransaction();
+   RewriterTransaction transaction = qmlItemNode().view()->beginRewriterTransaction(QByteArrayLiteral("QmlAnchors::removeAnchor"));
     if (qmlItemNode().isInBaseState()) {
         const PropertyName propertyName = anchorPropertyName(sourceAnchorLine);
         if (qmlItemNode().nodeInstance().hasAnchor("anchors.fill") && (sourceAnchorLine & AnchorLine::Fill)) {
@@ -352,7 +352,7 @@ void QmlAnchors::removeAnchor(AnchorLine::Type sourceAnchorLine)
 
 void QmlAnchors::removeAnchors()
 {
-    RewriterTransaction transaction = qmlItemNode().view()->beginRewriterTransaction();
+    RewriterTransaction transaction = qmlItemNode().view()->beginRewriterTransaction(QByteArrayLiteral("QmlAnchors::removeAnchors"));
     if (qmlItemNode().nodeInstance().hasAnchor("anchors.fill"))
         qmlItemNode().modelNode().removeProperty("anchors.fill");
     if (qmlItemNode().nodeInstance().hasAnchor("anchors.centerIn"))
@@ -540,7 +540,7 @@ void QmlAnchors::removeMargin(AnchorLine::Type sourceAnchorLineType)
 
 void QmlAnchors::removeMargins()
 {
-    RewriterTransaction transaction = qmlItemNode().view()->beginRewriterTransaction();
+    RewriterTransaction transaction = qmlItemNode().view()->beginRewriterTransaction(QByteArrayLiteral("QmlAnchors::removeMargins"));
     removeMargin(AnchorLine::Left);
     removeMargin(AnchorLine::Right);
     removeMargin(AnchorLine::Top);
diff --git a/src/plugins/qmldesigner/designercore/model/qmlchangeset.cpp b/src/plugins/qmldesigner/designercore/model/qmlchangeset.cpp
index 2602e96bbbebd7fdbd1d2dfdb1299b5b1dd75c67..c18fa8f8583bc4e8a6e290b89108f596ed13d056 100644
--- a/src/plugins/qmldesigner/designercore/model/qmlchangeset.cpp
+++ b/src/plugins/qmldesigner/designercore/model/qmlchangeset.cpp
@@ -72,7 +72,7 @@ bool QmlModelStateOperation::isValidQmlModelStateOperation(const ModelNode &mode
 
 void QmlPropertyChanges::removeProperty(const PropertyName &name)
 {
-    RewriterTransaction transaction(view()->beginRewriterTransaction());
+    RewriterTransaction transaction(view()->beginRewriterTransaction(QByteArrayLiteral("QmlPropertyChanges::removeProperty")));
     if (name == "name")
         return;
     modelNode().removeProperty(name);
diff --git a/src/plugins/qmldesigner/designercore/model/qmlitemnode.cpp b/src/plugins/qmldesigner/designercore/model/qmlitemnode.cpp
index 32ae0d815945649a62eb297c898d154c1dd5b0fa..c4ed7cc9c149244d6610f5f7336bb390b1aa9b3f 100644
--- a/src/plugins/qmldesigner/designercore/model/qmlitemnode.cpp
+++ b/src/plugins/qmldesigner/designercore/model/qmlitemnode.cpp
@@ -100,7 +100,7 @@ QmlItemNode QmlItemNode::createQmlItemNode(AbstractView *view, const ItemLibrary
     QmlItemNode newQmlItemNode;
 
     try {
-        RewriterTransaction transaction = view->beginRewriterTransaction();
+        RewriterTransaction transaction = view->beginRewriterTransaction(QByteArrayLiteral("QmlItemNode::createQmlItemNode"));
 
         NodeMetaInfo metaInfo = view->model()->metaInfo(itemLibraryEntry.typeName());
 
@@ -208,7 +208,7 @@ QmlItemNode QmlItemNode::createQmlItemNodeFromImage(AbstractView *view, const QS
         parentQmlItemNode = QmlItemNode(view->rootModelNode());
 
     if (parentQmlItemNode.isValid()) {
-        RewriterTransaction transaction = view->beginRewriterTransaction();
+        RewriterTransaction transaction = view->beginRewriterTransaction(QByteArrayLiteral("QmlItemNode::createQmlItemNodeFromImage"));
 
         checkImageImport(view);
 
diff --git a/src/plugins/qmldesigner/designercore/model/rewriterview.cpp b/src/plugins/qmldesigner/designercore/model/rewriterview.cpp
index 28289f605fc6b7a2b058aed5fb735fea559a07a3..5e0b8a787f7992a9279a9acae4abba9c9b68cb91 100644
--- a/src/plugins/qmldesigner/designercore/model/rewriterview.cpp
+++ b/src/plugins/qmldesigner/designercore/model/rewriterview.cpp
@@ -203,7 +203,7 @@ void RewriterView::propertiesAboutToBeRemoved(const QList<AbstractProperty> &pro
 
     foreach (const AbstractProperty &property, propertyList) {
         if (property.isDefaultProperty() && property.isNodeListProperty()) {
-            m_removeDefaultPropertyTransaction = beginRewriterTransaction();
+            m_removeDefaultPropertyTransaction = beginRewriterTransaction(QByteArrayLiteral("RewriterView::propertiesAboutToBeRemoved"));
 
             foreach (const ModelNode &node, property.toNodeListProperty().toModelNodeList()) {
                 modelToTextMerger()->nodeRemoved(node, property.toNodeAbstractProperty(), AbstractView::NoAdditionalChanges);
diff --git a/src/plugins/qmldesigner/designercore/rewritertransaction.cpp b/src/plugins/qmldesigner/designercore/rewritertransaction.cpp
index 91d8e0e223bb4c50349379fbe50349307c1741a2..417d4fde7f7a4369e5a401747a86fdb0b2c00e5e 100644
--- a/src/plugins/qmldesigner/designercore/rewritertransaction.cpp
+++ b/src/plugins/qmldesigner/designercore/rewritertransaction.cpp
@@ -35,13 +35,29 @@
 namespace QmlDesigner {
 
 
+
+QList<QByteArray> RewriterTransaction::m_identifierList;
+bool RewriterTransaction::m_activeIdentifier = !qgetenv("QML_DESIGNER_TRACE_REWRITER_TRANSACTION").isEmpty();
+
 RewriterTransaction::RewriterTransaction() : m_valid(false)
 {
 }
 
-RewriterTransaction::RewriterTransaction(AbstractView *_view) : m_view(_view), m_valid(true)
+RewriterTransaction::RewriterTransaction(AbstractView *_view, const QByteArray &identifier)
+    : m_view(_view),
+      m_identifier(identifier),
+      m_valid(true)
 {
     Q_ASSERT(view());
+
+    static int identifierNumber = 0;
+    m_identifierNumber = identifierNumber++;
+
+    if (m_activeIdentifier) {
+        qDebug() << "Begin RewriterTransaction:" << m_identifier << m_identifierNumber;
+        m_identifierList.append(m_identifier + QByteArrayLiteral("-") + QByteArray::number(m_identifierNumber));
+    }
+
     view()->emitRewriterBeginTransaction();
 }
 
@@ -60,6 +76,12 @@ void RewriterTransaction::commit()
     if (m_valid) {
         m_valid = false;
         view()->emitRewriterEndTransaction();
+
+        if (m_activeIdentifier) {
+            qDebug() << "Commit RewriterTransaction:" << m_identifier << m_identifierNumber;
+            bool success = m_identifierList.removeOne(m_identifier + QByteArrayLiteral("-") + QByteArray::number(m_identifierNumber));
+            Q_ASSERT(success);
+        }
     }
 }
 
@@ -70,6 +92,11 @@ void RewriterTransaction::rollback()
         m_valid = false;
         view()->emitRewriterEndTransaction();
         QmlDesignerPlugin::instance()->currentDesignDocument()->undo();
+
+        if (m_activeIdentifier) {
+            qDebug() << "Rollback RewriterTransaction:" << m_identifier << m_identifierNumber;
+            m_identifierList.removeOne(m_identifier + QByteArrayLiteral("-") + QByteArray::number(m_identifierNumber));
+       }
     }
 }
 
@@ -84,6 +111,8 @@ RewriterTransaction::RewriterTransaction(const RewriterTransaction &other)
     if (&other != this) {
         m_valid = other.m_valid;
         m_view = other.m_view;
+        m_identifier = other.m_identifier;
+        m_identifierNumber = other.m_identifierNumber;
         other.m_valid = false;
     }
 }
@@ -93,6 +122,8 @@ RewriterTransaction& RewriterTransaction::operator=(const RewriterTransaction &o
     if (!m_valid && (&other != this)) {
         m_valid = other.m_valid;
         m_view = other.m_view;
+        m_identifier = other.m_identifier;
+        m_identifierNumber = other.m_identifierNumber;
         other.m_valid = false;
     }
 
diff --git a/src/plugins/qmldesigner/designercore/rewritertransaction.h b/src/plugins/qmldesigner/designercore/rewritertransaction.h
index 3ab9410873d225a05f322839758580f74d47b01a..04eb5b7c726f4c78c2f1fb385762b14c560973f6 100644
--- a/src/plugins/qmldesigner/designercore/rewritertransaction.h
+++ b/src/plugins/qmldesigner/designercore/rewritertransaction.h
@@ -42,7 +42,7 @@ class QMLDESIGNERCORE_EXPORT RewriterTransaction
 {
 public:
     RewriterTransaction();
-    RewriterTransaction(AbstractView *view);
+    RewriterTransaction(AbstractView *view, const QByteArray &identifier);
     ~RewriterTransaction();
     void commit();
     void rollback();
@@ -55,7 +55,11 @@ protected:
     AbstractView *view();
 private:
    QWeakPointer<AbstractView> m_view;
+   QByteArray m_identifier;
    mutable bool m_valid;
+   int m_identifierNumber;
+   static QList<QByteArray> m_identifierList;
+   static bool m_activeIdentifier;
 };
 
 } //QmlDesigner