diff --git a/src/plugins/qmldesigner/designercore/include/nodeinstance.h b/src/plugins/qmldesigner/designercore/include/nodeinstance.h
index 12aa17e2aba62caa4822a8676a80f7004886addf..7ccf54cfb8b991146c98c78422be8dd0f8081060 100644
--- a/src/plugins/qmldesigner/designercore/include/nodeinstance.h
+++ b/src/plugins/qmldesigner/designercore/include/nodeinstance.h
@@ -133,7 +133,8 @@ public:
     QVariant resetVariant(const QString &name) const;
 
     bool hasAnchor(const QString &name) const;
-    bool isAnchoredBy() const;
+    bool isAnchoredBySibling() const;
+    bool isAnchoredByChildren() const;
     QPair<QString, NodeInstance> anchor(const QString &name) const;
 
     int penWidth() const;
diff --git a/src/plugins/qmldesigner/designercore/include/qmlitemnode.h b/src/plugins/qmldesigner/designercore/include/qmlitemnode.h
index 7293ed01425d28972e6879fb2deab8b49cd367c1..e197067c07cd782cd9dabcab7f5269797e5f125a 100644
--- a/src/plugins/qmldesigner/designercore/include/qmlitemnode.h
+++ b/src/plugins/qmldesigner/designercore/include/qmlitemnode.h
@@ -66,7 +66,8 @@ public:
     bool hasShowContent() const;
 
     bool canReparent() const;
-    bool instanceIsAnchoredBy() const;
+    bool instanceIsAnchoredBySibling() const;
+    bool instanceIsAnchoredByChildren() const;
 
     QRectF instanceBoundingRect() const;
     QTransform instanceTransform() const;
diff --git a/src/plugins/qmldesigner/designercore/instances/nodeinstance.cpp b/src/plugins/qmldesigner/designercore/instances/nodeinstance.cpp
index 1229488d437c045e70179791d32c3135e14c2b93..7d88a7260108d4f77cc0e4516458d219a5346eb3 100644
--- a/src/plugins/qmldesigner/designercore/instances/nodeinstance.cpp
+++ b/src/plugins/qmldesigner/designercore/instances/nodeinstance.cpp
@@ -470,9 +470,14 @@ int NodeInstance::penWidth() const
     return m_nodeInstance->penWidth();
 }
 
-bool NodeInstance::isAnchoredBy() const
+bool NodeInstance::isAnchoredBySibling() const
 {
-    return m_nodeInstance->isAnchoredBy();
+    return m_nodeInstance->isAnchoredBySibling();
+}
+
+bool NodeInstance::isAnchoredByChildren() const
+{
+    return m_nodeInstance->isAnchoredByChildren();
 }
 
 QPair<QString, NodeInstance> NodeInstance::anchor(const QString &name) const
diff --git a/src/plugins/qmldesigner/designercore/instances/objectnodeinstance.cpp b/src/plugins/qmldesigner/designercore/instances/objectnodeinstance.cpp
index f976003262b134994f1de41680ec8a81615636df..8fddbee8a57592021ed661591e646c5d7fe4ec0a 100644
--- a/src/plugins/qmldesigner/designercore/instances/objectnodeinstance.cpp
+++ b/src/plugins/qmldesigner/designercore/instances/objectnodeinstance.cpp
@@ -306,7 +306,12 @@ bool ObjectNodeInstance::hasAnchor(const QString &/*name*/) const
     return false;
 }
 
-bool ObjectNodeInstance::isAnchoredBy() const
+bool ObjectNodeInstance::isAnchoredBySibling() const
+{
+    return false;
+}
+
+bool ObjectNodeInstance::isAnchoredByChildren() const
 {
     return false;
 }
diff --git a/src/plugins/qmldesigner/designercore/instances/objectnodeinstance.h b/src/plugins/qmldesigner/designercore/instances/objectnodeinstance.h
index 05ce41fb6e126f9b400bf393f7c6be7c1bcf69f1..4bb43e330e3c41921dbe1acc25cfd38d7bf25858 100644
--- a/src/plugins/qmldesigner/designercore/instances/objectnodeinstance.h
+++ b/src/plugins/qmldesigner/designercore/instances/objectnodeinstance.h
@@ -133,7 +133,8 @@ public:
 
     virtual bool hasAnchor(const QString &name) const;
     virtual QPair<QString, NodeInstance> anchor(const QString &name) const;
-    virtual bool isAnchoredBy() const;
+    virtual bool isAnchoredBySibling() const;
+    virtual bool isAnchoredByChildren() const;
 
     virtual double rotation() const;
     virtual double scale() const;
diff --git a/src/plugins/qmldesigner/designercore/instances/qmlgraphicsitemnodeinstance.cpp b/src/plugins/qmldesigner/designercore/instances/qmlgraphicsitemnodeinstance.cpp
index 707592bde00acf05bcbb332294dd53b308c52de2..860c1b72de3e22484121cb74f767f84821b8526c 100644
--- a/src/plugins/qmldesigner/designercore/instances/qmlgraphicsitemnodeinstance.cpp
+++ b/src/plugins/qmldesigner/designercore/instances/qmlgraphicsitemnodeinstance.cpp
@@ -591,8 +591,8 @@ bool isAnchoredTo(QDeclarativeItem *fromItem, QDeclarativeItem *toItem)
 
 bool areChildrenAnchoredTo(QDeclarativeItem *fromItem, QDeclarativeItem *toItem)
 {
-    foreach(QObject *childObject, fromItem->children()) {
-        QDeclarativeItem *childItem = qobject_cast<QDeclarativeItem*>(childObject);
+    foreach(QGraphicsItem *childGraphicsItem, fromItem->childItems()) {
+        QDeclarativeItem *childItem = qobject_cast<QDeclarativeItem*>(childGraphicsItem->toGraphicsObject());
         if (childItem) {
             if (isAnchoredTo(childItem, toItem))
                 return true;
@@ -605,14 +605,11 @@ bool areChildrenAnchoredTo(QDeclarativeItem *fromItem, QDeclarativeItem *toItem)
     return false;
 }
 
-bool QmlGraphicsItemNodeInstance::isAnchoredBy() const
+bool QmlGraphicsItemNodeInstance::isAnchoredBySibling() const
 {
-    if (areChildrenAnchoredTo(qmlGraphicsItem(), qmlGraphicsItem())) // search in children for a anchor to this item
-        return true;
-
-    if (qmlGraphicsItem()->parent()) {
-        foreach(QObject *siblingObject, qmlGraphicsItem()->parent()->children()) { // search in siblings for a anchor to this item
-            QDeclarativeItem *siblingItem = qobject_cast<QDeclarativeItem*>(siblingObject);
+    if (qmlGraphicsItem()->parentItem()) {
+        foreach(QGraphicsItem *siblingGraphicsItem, qmlGraphicsItem()->parentItem()->childItems()) { // search in siblings for a anchor to this item
+            QDeclarativeItem *siblingItem = qobject_cast<QDeclarativeItem*>(siblingGraphicsItem->toGraphicsObject());
             if (siblingItem) {
                 if (isAnchoredTo(siblingItem, qmlGraphicsItem()))
                     return true;
@@ -626,6 +623,14 @@ bool QmlGraphicsItemNodeInstance::isAnchoredBy() const
     return false;
 }
 
+bool QmlGraphicsItemNodeInstance::isAnchoredByChildren() const
+{
+    if (areChildrenAnchoredTo(qmlGraphicsItem(), qmlGraphicsItem())) // search in children for a anchor to this item
+        return true;
+
+    return false;
+}
+
 QDeclarativeItem *QmlGraphicsItemNodeInstance::qmlGraphicsItem() const
 {
     if (object() == 0)
diff --git a/src/plugins/qmldesigner/designercore/instances/qmlgraphicsitemnodeinstance.h b/src/plugins/qmldesigner/designercore/instances/qmlgraphicsitemnodeinstance.h
index 67aa6813516d2c4cb45200ab3186ad78a42f752f..43eeb4a6ba6dcb4a5ca099f1859e34e5e9fe1918 100644
--- a/src/plugins/qmldesigner/designercore/instances/qmlgraphicsitemnodeinstance.h
+++ b/src/plugins/qmldesigner/designercore/instances/qmlgraphicsitemnodeinstance.h
@@ -64,7 +64,9 @@ public:
 
     bool hasAnchor(const QString &name) const;
     QPair<QString, NodeInstance> anchor(const QString &name) const;
-    bool isAnchoredBy() const;
+    bool isAnchoredBySibling() const;
+    bool isAnchoredByChildren() const;
+
 protected:
     QmlGraphicsItemNodeInstance(QDeclarativeItem *item, bool hasContent);
     QDeclarativeItem *qmlGraphicsItem() const;
diff --git a/src/plugins/qmldesigner/designercore/model/qmlitemnode.cpp b/src/plugins/qmldesigner/designercore/model/qmlitemnode.cpp
index 2d60b2a25df1e2125d48d9a1fb052a3c007f8cad..cafa7754ce6d299e25b6bfd963e2e0bcf9d736da 100644
--- a/src/plugins/qmldesigner/designercore/model/qmlitemnode.cpp
+++ b/src/plugins/qmldesigner/designercore/model/qmlitemnode.cpp
@@ -188,12 +188,17 @@ bool QmlItemNode::hasShowContent() const
 
 bool QmlItemNode::canReparent() const
 {
-    return QmlObjectNode::canReparent() && !anchors().instanceHasAnchors() && !instanceIsAnchoredBy();
+    return QmlObjectNode::canReparent() && !anchors().instanceHasAnchors() && !instanceIsAnchoredBySibling();
 }
 
-bool QmlItemNode::instanceIsAnchoredBy() const
+bool QmlItemNode::instanceIsAnchoredBySibling() const
 {
-    return nodeInstance().isAnchoredBy();
+    return nodeInstance().isAnchoredBySibling();
+}
+
+bool QmlItemNode::instanceIsAnchoredByChildren() const
+{
+    return nodeInstance().isAnchoredByChildren();
 }
 
 QRectF  QmlItemNode::instanceBoundingRect() const