diff --git a/src/plugins/qmldesigner/components/propertyeditor/qmlanchorbindingproxy.cpp b/src/plugins/qmldesigner/components/propertyeditor/qmlanchorbindingproxy.cpp
index b5a5450bf3764792bf023d1a35340e2663ec42e1..6ec0bebca0105a9055098c63cc1e1487bfc93b13 100644
--- a/src/plugins/qmldesigner/components/propertyeditor/qmlanchorbindingproxy.cpp
+++ b/src/plugins/qmldesigner/components/propertyeditor/qmlanchorbindingproxy.cpp
@@ -39,6 +39,8 @@ namespace QmlDesigner {
 class ModelNode;
 class NodeState;
 
+const QString auxDataString = QLatin1String("anchors_");
+
 namespace Internal {
 
 QmlAnchorBindingProxy::QmlAnchorBindingProxy(QObject *parent) :
@@ -269,6 +271,15 @@ void QmlAnchorBindingProxy::resetLayout() {
         m_fxItemNode.anchors().removeAnchors();
         m_fxItemNode.anchors().removeMargins();
 
+        if (qFuzzyCompare(m_fxItemNode.instancePosition().x(), 0.0))
+            m_fxItemNode.setVariantProperty("x", m_fxItemNode.modelNode().auxiliaryData(auxDataString + "x"));
+        if (qFuzzyCompare(m_fxItemNode.instancePosition().y(), 0.0))
+            m_fxItemNode.setVariantProperty("y", m_fxItemNode.modelNode().auxiliaryData(auxDataString + "y"));
+        if (qFuzzyCompare(m_fxItemNode.instanceSize().width(), 0.0))
+            m_fxItemNode.setVariantProperty("width", m_fxItemNode.modelNode().auxiliaryData(auxDataString + "width"));
+        if (qFuzzyCompare(m_fxItemNode.instanceSize().height(), 0.0))
+            m_fxItemNode.setVariantProperty("height", m_fxItemNode.modelNode().auxiliaryData(auxDataString + "height"));
+
         emit topAnchorChanged();
         emit bottomAnchorChanged();
         emit leftAnchorChanged();
@@ -290,6 +301,7 @@ void QmlAnchorBindingProxy::setBottomAnchor(bool anchor)
         removeBottomAnchor();
     } else {
         calcBottomMargin();
+        m_fxItemNode.modelNode().setAuxiliaryData(auxDataString + "height", m_fxItemNode.instanceSize().height());
         m_fxItemNode.removeVariantProperty("height");
     }
     emit bottomAnchorChanged();
@@ -312,7 +324,8 @@ void QmlAnchorBindingProxy::setLeftAnchor(bool anchor)
         removeLeftAnchor();
     } else {
         calcLeftMargin();
-        m_fxItemNode.removeVariantProperty("width");
+        m_fxItemNode.modelNode().setAuxiliaryData(auxDataString + "x", m_fxItemNode.instancePosition().x());
+        m_fxItemNode.removeVariantProperty("x");
     }
     emit leftAnchorChanged();
     if (hasAnchors() != anchor)
@@ -333,7 +346,8 @@ void QmlAnchorBindingProxy::setRightAnchor(bool anchor)
         removeRightAnchor();
     } else {
         calcRightMargin();
-        m_fxItemNode.removeVariantProperty("x");
+        m_fxItemNode.modelNode().setAuxiliaryData(auxDataString + "width", m_fxItemNode.instanceSize().width());
+        m_fxItemNode.removeVariantProperty("width");
     }
     emit rightAnchorChanged();
     if (hasAnchors() != anchor)
@@ -364,13 +378,11 @@ void QmlAnchorBindingProxy::calcTopMargin()
 {
     m_locked = true;
 
-    if (m_topTarget == m_fxItemNode.modelNode().parentProperty().parentModelNode()) {
+    if (m_topTarget.modelNode() == m_fxItemNode.modelNode().parentProperty().parentModelNode()) {
         qreal topMargin = transformedBoundingBox().top() - parentBoundingBox().top();
         m_fxItemNode.anchors().setMargin( AnchorLine::Top, topMargin);
         m_fxItemNode.anchors().setAnchor(AnchorLine::Top, m_topTarget, AnchorLine::Top);
     } else {
-        qDebug() << boundingBox(m_fxItemNode).top();
-        qDebug() << boundingBox(m_topTarget).bottom();
         qreal topMargin = boundingBox(m_fxItemNode).top() - boundingBox(m_topTarget).bottom();
         m_fxItemNode.anchors().setMargin( AnchorLine::Top, topMargin);
         m_fxItemNode.anchors().setAnchor(AnchorLine::Top, m_topTarget, AnchorLine::Bottom);
@@ -383,7 +395,7 @@ void QmlAnchorBindingProxy::calcBottomMargin()
 {
     m_locked = true;
 
-    if (m_bottomTarget == m_fxItemNode.modelNode().parentProperty().parentModelNode()) {
+    if (m_bottomTarget.modelNode() == m_fxItemNode.modelNode().parentProperty().parentModelNode()) {
         qreal bottomMargin =  parentBoundingBox().bottom() - transformedBoundingBox().bottom();
         m_fxItemNode.anchors().setMargin( AnchorLine::Bottom, bottomMargin);
         m_fxItemNode.anchors().setAnchor(AnchorLine::Bottom, m_bottomTarget, AnchorLine::Bottom);
@@ -400,7 +412,7 @@ void QmlAnchorBindingProxy::calcLeftMargin()
 {
     m_locked = true;
 
-    if (m_leftTarget == m_fxItemNode.modelNode().parentProperty().parentModelNode()) {
+    if (m_leftTarget.modelNode() == m_fxItemNode.modelNode().parentProperty().parentModelNode()) {
         qreal leftMargin = transformedBoundingBox().left() - parentBoundingBox().left();
         m_fxItemNode.anchors().setMargin(AnchorLine::Left, leftMargin);
         m_fxItemNode.anchors().setAnchor(AnchorLine::Left, m_leftTarget, AnchorLine::Left);
@@ -417,7 +429,7 @@ void QmlAnchorBindingProxy::calcRightMargin()
 {
     m_locked = true;
 
-    if (m_rightTarget == m_fxItemNode.modelNode().parentProperty().parentModelNode()) {
+    if (m_rightTarget.modelNode() == m_fxItemNode.modelNode().parentProperty().parentModelNode()) {
         qreal rightMargin = parentBoundingBox().right() - transformedBoundingBox().right();
         m_fxItemNode.anchors().setMargin( AnchorLine::Right, rightMargin);
         m_fxItemNode.anchors().setAnchor(AnchorLine::Right, m_rightTarget, AnchorLine::Right);
@@ -444,6 +456,7 @@ void QmlAnchorBindingProxy::setTopAnchor(bool anchor)
         removeTopAnchor();
     } else {
         calcTopMargin();
+        m_fxItemNode.modelNode().setAuxiliaryData(auxDataString + "y", m_fxItemNode.instancePosition().y());
         m_fxItemNode.removeVariantProperty("y");
     }
     emit topAnchorChanged();
@@ -456,6 +469,10 @@ void QmlAnchorBindingProxy::removeTopAnchor() {
 
     m_fxItemNode.anchors().removeAnchor(AnchorLine::Top);
     m_fxItemNode.anchors().removeMargin(AnchorLine::Top);
+
+    if (qFuzzyCompare(m_fxItemNode.instancePosition().y(), 0.0) && m_fxItemNode.modelNode().hasAuxiliaryData(auxDataString + "y"))
+        m_fxItemNode.setVariantProperty("y", m_fxItemNode.modelNode().auxiliaryData(auxDataString + "y"));
+
 }
 
 void QmlAnchorBindingProxy::removeBottomAnchor() {
@@ -463,6 +480,9 @@ void QmlAnchorBindingProxy::removeBottomAnchor() {
 
     m_fxItemNode.anchors().removeAnchor(AnchorLine::Bottom);
     m_fxItemNode.anchors().removeMargin(AnchorLine::Bottom);
+
+    if (qFuzzyCompare(m_fxItemNode.instanceSize().height(), 0.0) && m_fxItemNode.modelNode().hasAuxiliaryData(auxDataString + "height"))
+        m_fxItemNode.setVariantProperty("height", m_fxItemNode.modelNode().auxiliaryData(auxDataString + "height"));
 }
 
 void QmlAnchorBindingProxy::removeLeftAnchor() {
@@ -470,6 +490,9 @@ void QmlAnchorBindingProxy::removeLeftAnchor() {
 
     m_fxItemNode.anchors().removeAnchor(AnchorLine::Left);
     m_fxItemNode.anchors().removeMargin(AnchorLine::Left);
+
+    if (qFuzzyCompare(m_fxItemNode.instancePosition().x(), 0.0) && m_fxItemNode.modelNode().hasAuxiliaryData(auxDataString + "x"))
+        m_fxItemNode.setVariantProperty("x", m_fxItemNode.modelNode().auxiliaryData(auxDataString + "x"));
 }
 
 void QmlAnchorBindingProxy::removeRightAnchor() {
@@ -477,6 +500,9 @@ void QmlAnchorBindingProxy::removeRightAnchor() {
 
     m_fxItemNode.anchors().removeAnchor(AnchorLine::Right);
     m_fxItemNode.anchors().removeMargin(AnchorLine::Right);
+
+    if (qFuzzyCompare(m_fxItemNode.instanceSize().width(), 0.0) && m_fxItemNode.modelNode().hasAuxiliaryData(auxDataString + "width"))
+        m_fxItemNode.setVariantProperty("width", m_fxItemNode.modelNode().auxiliaryData(auxDataString + "width"));
 }
 
 void QmlAnchorBindingProxy::setVerticalCentered(bool centered)
@@ -487,6 +513,8 @@ void QmlAnchorBindingProxy::setVerticalCentered(bool centered)
     if (verticalCentered() == centered)
         return;
 
+    m_locked = true;
+
     RewriterTransaction transaction = m_fxItemNode.modelNode().view()->beginRewriterTransaction();
 
     if (!centered) {
@@ -495,6 +523,9 @@ void QmlAnchorBindingProxy::setVerticalCentered(bool centered)
     } else {
         m_fxItemNode.anchors().setAnchor(AnchorLine::VerticalCenter, m_fxItemNode.modelNode().parentProperty().parentModelNode(), AnchorLine::VerticalCenter);
     }
+
+    m_locked = false;
+
     emit centeredVChanged();
 }
 
@@ -506,6 +537,8 @@ void QmlAnchorBindingProxy::setHorizontalCentered(bool centered)
     if (horizontalCentered() == centered)
         return;
 
+    m_locked = true;
+
     RewriterTransaction transaction = m_fxItemNode.modelNode().view()->beginRewriterTransaction();
 
     if (!centered) {
@@ -514,6 +547,9 @@ void QmlAnchorBindingProxy::setHorizontalCentered(bool centered)
     } else {
         m_fxItemNode.anchors().setAnchor(AnchorLine::HorizontalCenter, m_fxItemNode.modelNode().parentProperty().parentModelNode(), AnchorLine::HorizontalCenter);
     }
+
+    m_locked = false;
+
     emit centeredHChanged();
 }
 
@@ -532,6 +568,15 @@ void QmlAnchorBindingProxy::fill()
 
     RewriterTransaction transaction = m_fxItemNode.modelNode().view()->beginRewriterTransaction();
 
+    m_fxItemNode.modelNode().setAuxiliaryData(auxDataString + "x", m_fxItemNode.instancePosition().x());
+    m_fxItemNode.removeVariantProperty("x");
+    m_fxItemNode.modelNode().setAuxiliaryData(auxDataString + "y", m_fxItemNode.instancePosition().y());
+    m_fxItemNode.removeVariantProperty("y");
+    m_fxItemNode.modelNode().setAuxiliaryData(auxDataString + "width", m_fxItemNode.instanceSize().width());
+    m_fxItemNode.removeVariantProperty("width");
+    m_fxItemNode.modelNode().setAuxiliaryData(auxDataString + "height", m_fxItemNode.instanceSize().height());
+    m_fxItemNode.removeVariantProperty("height");
+
     m_fxItemNode.anchors().fill();
 
     setHorizontalCentered(false);
@@ -542,11 +587,6 @@ void QmlAnchorBindingProxy::fill()
     m_fxItemNode.anchors().removeMargin(AnchorLine::Top);
     m_fxItemNode.anchors().removeMargin(AnchorLine::Bottom);
 
-    m_fxItemNode.removeVariantProperty("x");
-    m_fxItemNode.removeVariantProperty("y");
-    m_fxItemNode.removeVariantProperty("width");
-    m_fxItemNode.removeVariantProperty("height");
-
     emit topAnchorChanged();
     emit bottomAnchorChanged();
     emit leftAnchorChanged();