diff --git a/src/plugins/qmldesigner/components/formeditor/resizemanipulator.cpp b/src/plugins/qmldesigner/components/formeditor/resizemanipulator.cpp
index b0f218964614da50c21587719793602dc23e0a00..24e9ef43bd185b113e9083b896de06fc33caf83e 100644
--- a/src/plugins/qmldesigner/components/formeditor/resizemanipulator.cpp
+++ b/src/plugins/qmldesigner/components/formeditor/resizemanipulator.cpp
@@ -185,7 +185,7 @@ void ResizeManipulator::update(const QPointF& updatePoint, Snapping useSnapping)
                 boundingRect.setTop(boundingRect.top() - minimumHeight + boundingRect.height());
 
             formEditorItem->qmlItemNode().setSize(boundingRect.size());
-            formEditorItem->qmlItemNode().setPosition(m_beginToParentTransform.map(boundingRect.topLeft()));
+            formEditorItem->qmlItemNode().setPositionWithBorder(m_beginToParentTransform.map(boundingRect.topLeft()));
 
 
             if (anchors.instanceHasAnchor(AnchorLine::Top)) {
@@ -226,7 +226,7 @@ void ResizeManipulator::update(const QPointF& updatePoint, Snapping useSnapping)
                 boundingRect.setWidth(minimumWidth);
 
             formEditorItem->qmlItemNode().setSize(boundingRect.size());
-            formEditorItem->qmlItemNode().setPosition(m_beginToParentTransform.map(boundingRect.topLeft()));
+            formEditorItem->qmlItemNode().setPositionWithBorder(m_beginToParentTransform.map(boundingRect.topLeft()));
 
             if (anchors.instanceHasAnchor(AnchorLine::Top)) {
                anchors.setMargin(AnchorLine::Top,
@@ -266,7 +266,7 @@ void ResizeManipulator::update(const QPointF& updatePoint, Snapping useSnapping)
                 boundingRect.setLeft(boundingRect.left() - minimumWidth + boundingRect.width());
 
             formEditorItem->qmlItemNode().setSize(boundingRect.size());
-            formEditorItem->qmlItemNode().setPosition(m_beginToParentTransform.map(boundingRect.topLeft()));
+            formEditorItem->qmlItemNode().setPositionWithBorder(m_beginToParentTransform.map(boundingRect.topLeft()));
 
             if (anchors.instanceHasAnchor(AnchorLine::Left)) {
                anchors.setMargin(AnchorLine::Left,
@@ -320,7 +320,7 @@ void ResizeManipulator::update(const QPointF& updatePoint, Snapping useSnapping)
                 boundingRect.setTop(boundingRect.top() - minimumHeight + boundingRect.height());
 
             formEditorItem->qmlItemNode().setSize(boundingRect.size());
-            formEditorItem->qmlItemNode().setPosition(m_beginToParentTransform.map(boundingRect.topLeft()));
+            formEditorItem->qmlItemNode().setPositionWithBorder(m_beginToParentTransform.map(boundingRect.topLeft()));
 
             if (anchors.instanceHasAnchor(AnchorLine::Top)) {
                anchors.setMargin(AnchorLine::Top,
@@ -370,7 +370,7 @@ void ResizeManipulator::update(const QPointF& updatePoint, Snapping useSnapping)
                 boundingRect.setLeft(boundingRect.left() - minimumWidth + boundingRect.width());
 
             formEditorItem->qmlItemNode().setSize(boundingRect.size());
-            formEditorItem->qmlItemNode().setPosition(m_beginToParentTransform.map(boundingRect.topLeft()));
+            formEditorItem->qmlItemNode().setPositionWithBorder(m_beginToParentTransform.map(boundingRect.topLeft()));
 
             if (anchors.instanceHasAnchor(AnchorLine::Left)) {
                anchors.setMargin(AnchorLine::Left,
diff --git a/src/plugins/qmldesigner/core/include/nodeinstance.h b/src/plugins/qmldesigner/core/include/nodeinstance.h
index d417b0eef9a8d973b6c63a832744e9e34b809ee3..e0cb37b63b9fb1684eb2d1e36742dc57785d4a67 100644
--- a/src/plugins/qmldesigner/core/include/nodeinstance.h
+++ b/src/plugins/qmldesigner/core/include/nodeinstance.h
@@ -129,6 +129,8 @@ public:
     bool isAnchoredBy() const;
     QPair<QString, NodeInstance> anchor(const QString &name) const;
 
+    int penWidth() const;
+
 private: // functions
     NodeInstance(const QSharedPointer<Internal::ObjectNodeInstance> &abstractInstance);
 
diff --git a/src/plugins/qmldesigner/core/include/qmlitemnode.h b/src/plugins/qmldesigner/core/include/qmlitemnode.h
index 643dea042e256acd5b407d110c66ed522fdf0318..4b40c827333d28f25fbd27d9d3a7365571a4d130 100644
--- a/src/plugins/qmldesigner/core/include/qmlitemnode.h
+++ b/src/plugins/qmldesigner/core/include/qmlitemnode.h
@@ -76,6 +76,7 @@ public:
 
     void setSize(const QSizeF &size);
     void setPosition(const QPointF &position);
+    void setPositionWithBorder(const QPointF &position);
 
     void selectNode();
     void deselectNode();
diff --git a/src/plugins/qmldesigner/core/instances/nodeinstance.cpp b/src/plugins/qmldesigner/core/instances/nodeinstance.cpp
index 00c4d556e488c18b7703e5659f8959130d8f76b6..5798c681c8997974e6a9cf4db355edd90989d45a 100644
--- a/src/plugins/qmldesigner/core/instances/nodeinstance.cpp
+++ b/src/plugins/qmldesigner/core/instances/nodeinstance.cpp
@@ -455,6 +455,11 @@ bool NodeInstance::hasAnchor(const QString &name) const
     return m_nodeInstance->hasAnchor(name);
 }
 
+int NodeInstance::penWidth() const
+{
+    return m_nodeInstance->penWidth();
+}
+
 bool NodeInstance::isAnchoredBy() const
 {
     return m_nodeInstance->isAnchoredBy();
diff --git a/src/plugins/qmldesigner/core/instances/objectnodeinstance.cpp b/src/plugins/qmldesigner/core/instances/objectnodeinstance.cpp
index ca1716200fe561fce9049fb4064c94d9f8be6ff2..f5b5ab48d2ea4ab5ea8de3919a5c71e86bc44a53 100644
--- a/src/plugins/qmldesigner/core/instances/objectnodeinstance.cpp
+++ b/src/plugins/qmldesigner/core/instances/objectnodeinstance.cpp
@@ -661,6 +661,11 @@ QSizeF ObjectNodeInstance::size() const
     return QSizeF();
 }
 
+int ObjectNodeInstance::penWidth() const
+{
+    return 0;
+}
+
 bool ObjectNodeInstance::isVisible() const
 {
     return false;
diff --git a/src/plugins/qmldesigner/core/instances/objectnodeinstance.h b/src/plugins/qmldesigner/core/instances/objectnodeinstance.h
index 16b6af3a42f48894ce1f7be4aeb5ad88fe9e15cb..10ddef70472feb228e42612008dd17a273e3c862 100644
--- a/src/plugins/qmldesigner/core/instances/objectnodeinstance.h
+++ b/src/plugins/qmldesigner/core/instances/objectnodeinstance.h
@@ -122,6 +122,8 @@ public:
     virtual QTransform sceneTransform() const;
     virtual double opacity() const;
 
+    virtual int penWidth() const;
+
     virtual bool hasAnchor(const QString &name) const;
     virtual QPair<QString, NodeInstance> anchor(const QString &name) const;
     virtual bool isAnchoredBy() const;
diff --git a/src/plugins/qmldesigner/core/instances/qmlgraphicsitemnodeinstance.cpp b/src/plugins/qmldesigner/core/instances/qmlgraphicsitemnodeinstance.cpp
index d2abed4752eb1683d742754112e25919d7213c4c..7593da3862a4c0233e5a2ccf48600060698c591a 100644
--- a/src/plugins/qmldesigner/core/instances/qmlgraphicsitemnodeinstance.cpp
+++ b/src/plugins/qmldesigner/core/instances/qmlgraphicsitemnodeinstance.cpp
@@ -40,7 +40,7 @@
 
 #include <private/qmlgraphicsanchors_p.h>
 #include <private/qmlgraphicsanchors_p_p.h>
-
+#include <private/qmlgraphicsrectangle_p.h>
 #include <private/qmlexpression_p.h>
 
 #include <cmath>
@@ -226,6 +226,14 @@ void QmlGraphicsItemNodeInstance::resetVertical()
        setPropertyVariant("height", qmlGraphicsItem()->implicitHeight());
 }
 
+int QmlGraphicsItemNodeInstance::penWidth() const
+{
+    QmlGraphicsRectangle *qmlGraphcisRectangle = qobject_cast<QmlGraphicsRectangle*>(object());
+    if (qmlGraphcisRectangle)
+        return qmlGraphcisRectangle->border()->width();
+
+    return GraphicsObjectNodeInstance::penWidth();
+}
 
 void QmlGraphicsItemNodeInstance::resetProperty(const QString &name)
 {
diff --git a/src/plugins/qmldesigner/core/instances/qmlgraphicsitemnodeinstance.h b/src/plugins/qmldesigner/core/instances/qmlgraphicsitemnodeinstance.h
index da1275b282c2bda643b6a6e3db89b5b30030407f..4eb870686058dd4400c7d02240556078e494c0e4 100644
--- a/src/plugins/qmldesigner/core/instances/qmlgraphicsitemnodeinstance.h
+++ b/src/plugins/qmldesigner/core/instances/qmlgraphicsitemnodeinstance.h
@@ -60,6 +60,8 @@ public:
     QVariant property(const QString &name) const;
     void resetProperty(const QString &name);
 
+    int penWidth() const;
+
     bool hasAnchor(const QString &name) const;
     QPair<QString, NodeInstance> anchor(const QString &name) const;
     bool isAnchoredBy() const;
diff --git a/src/plugins/qmldesigner/core/model/qmlitemnode.cpp b/src/plugins/qmldesigner/core/model/qmlitemnode.cpp
index 3613b392eb3bef6dd9c2c7484b5791a91d75efaa..0078602983739724614f16701a34e9b21fe27b13 100644
--- a/src/plugins/qmldesigner/core/model/qmlitemnode.cpp
+++ b/src/plugins/qmldesigner/core/model/qmlitemnode.cpp
@@ -200,8 +200,8 @@ void QmlItemNode::paintInstance(QPainter *painter) const
 void QmlItemNode::setSize(const QSizeF &size)
 {
     RewriterTransaction transaction = qmlModelView()->beginRewriterTransaction();
-    setVariantProperty("width", qRound(size.width()));
-    setVariantProperty("height", qRound(size.height()));
+    setVariantProperty("width", qRound(size.width()) - (nodeInstance().penWidth()));
+    setVariantProperty("height", qRound(size.height()) - (nodeInstance().penWidth()));
 }
 
 void QmlItemNode::setPosition(const QPointF &position)
@@ -211,6 +211,13 @@ void QmlItemNode::setPosition(const QPointF &position)
     setVariantProperty("y", qRound(position.y()));
 }
 
+void QmlItemNode::setPositionWithBorder(const QPointF &position)
+{
+    RewriterTransaction transaction = qmlModelView()->beginRewriterTransaction();
+    setVariantProperty("x", qRound(position.x()) + (nodeInstance().penWidth() / 2));
+    setVariantProperty("y", qRound(position.y()) + (nodeInstance().penWidth() / 2));
+}
+
 void QmlItemNode::selectNode()
 {
     modelNode().selectNode();