diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/instances.pri b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/instances.pri
index 5cb63be73931f12199a15a14bb54b57cf7be6f42..28a733cf669bb8ffed63df5f0ea4f02349d64059 100644
--- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/instances.pri
+++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/instances.pri
@@ -20,6 +20,7 @@ HEADERS += $$PWD/qmlstatenodeinstance.h
 HEADERS += $$PWD/qmltransitionnodeinstance.h
 HEADERS += $$PWD/servernodeinstance.h
 HEADERS += $$PWD/anchorchangesnodeinstance.h
+HEADERS += $$PWD/positionernodeinstance.h
 
 SOURCES += $$PWD/qt5nodeinstanceserver.cpp
 SOURCES += $$PWD/qt5informationnodeinstanceserver.cpp
@@ -41,3 +42,4 @@ SOURCES +=  $$PWD/qmlstatenodeinstance.cpp
 SOURCES +=  $$PWD/qmltransitionnodeinstance.cpp
 SOURCES +=  $$PWD/servernodeinstance.cpp
 SOURCES +=  $$PWD/anchorchangesnodeinstance.cpp
+SOURCES += $$PWD/positionernodeinstance.cpp
diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/positionernodeinstance.cpp b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/positionernodeinstance.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..080d1aa0616fadae98647c3db2a0afc20ae33f60
--- /dev/null
+++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/positionernodeinstance.cpp
@@ -0,0 +1,99 @@
+/**************************************************************************
+**
+** This file is part of Qt Creator
+**
+** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+**
+** Contact: http://www.qt-project.org/
+**
+**
+** GNU Lesser General Public License Usage
+**
+** This file may be used under the terms of the GNU Lesser General Public
+** License version 2.1 as published by the Free Software Foundation and
+** appearing in the file LICENSE.LGPL included in the packaging of this file.
+** Please review the following information to ensure the GNU Lesser General
+** Public License version 2.1 requirements will be met:
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** Other Usage
+**
+** Alternatively, this file may be used in accordance with the terms and
+** conditions contained in a signed written agreement between you and Nokia.
+**
+**
+**************************************************************************/
+
+#include "positionernodeinstance.h"
+#include <private/qquickpositioners_p.h>
+
+namespace QmlDesigner {
+namespace Internal {
+
+PositionerNodeInstance::PositionerNodeInstance(QQuickBasePositioner *item)
+    : QuickItemNodeInstance(item)
+{
+}
+
+bool PositionerNodeInstance::isPositioner() const
+{
+    return true;
+}
+
+bool PositionerNodeInstance::isResizable() const
+{
+    return true;
+}
+
+void PositionerNodeInstance::setPropertyVariant(const QString &name, const QVariant &value)
+{
+    if (name == "move" || name == "add")
+        return;
+
+    QuickItemNodeInstance::setPropertyVariant(name, value);
+}
+
+void PositionerNodeInstance::setPropertyBinding(const QString &name, const QString &expression)
+{
+    if (name == "move" || name == "add")
+        return;
+
+    QuickItemNodeInstance::setPropertyBinding(name, expression);
+}
+
+PositionerNodeInstance::Pointer PositionerNodeInstance::create(QObject *object)
+{ 
+    QQuickBasePositioner *positioner = qobject_cast<QQuickBasePositioner*>(object);
+
+    Q_ASSERT(positioner);
+
+    Pointer instance(new PositionerNodeInstance(positioner));
+
+    instance->setHasContent(anyItemHasContent(positioner));
+    positioner->setFlag(QQuickItem::ItemHasContents, true);
+
+    static_cast<QQmlParserStatus*>(positioner)->classBegin();
+
+    instance->populateResetHashes();
+
+    return instance;
+}
+
+QQuickBasePositioner *PositionerNodeInstance::positioner() const
+{
+    Q_ASSERT(qobject_cast<QQuickBasePositioner*>(object()));
+    return static_cast<QQuickBasePositioner*>(object());
+}
+
+void PositionerNodeInstance::refreshPositioner()
+{
+    bool success = QMetaObject::invokeMethod(positioner(), "prePositioning");
+    Q_ASSERT(success);
+}
+
+}
+} // namespace QmlDesigner
diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/positionernodeinstance.h b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/positionernodeinstance.h
new file mode 100644
index 0000000000000000000000000000000000000000..e53628abd47de470bef9f66ffef913cc45a9f046
--- /dev/null
+++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/positionernodeinstance.h
@@ -0,0 +1,68 @@
+/**************************************************************************
+**
+** This file is part of Qt Creator
+**
+** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+**
+** Contact: http://www.qt-project.org/
+**
+**
+** GNU Lesser General Public License Usage
+**
+** This file may be used under the terms of the GNU Lesser General Public
+** License version 2.1 as published by the Free Software Foundation and
+** appearing in the file LICENSE.LGPL included in the packaging of this file.
+** Please review the following information to ensure the GNU Lesser General
+** Public License version 2.1 requirements will be met:
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** Other Usage
+**
+** Alternatively, this file may be used in accordance with the terms and
+** conditions contained in a signed written agreement between you and Nokia.
+**
+**
+**************************************************************************/
+
+#ifndef POSITIONERNODEINSTANCE_H
+#define POSITIONERNODEINSTANCE_H
+
+#include "quickitemnodeinstance.h"
+
+QT_BEGIN_NAMESPACE
+class QQuickBasePositioner;
+QT_END_NAMESPACE
+
+namespace QmlDesigner {
+namespace Internal {
+
+class PositionerNodeInstance : public QuickItemNodeInstance
+{
+public:
+    typedef QSharedPointer<PositionerNodeInstance> Pointer;
+    typedef QWeakPointer<PositionerNodeInstance> WeakPointer;
+
+    static Pointer create(QObject *objectToBeWrapped);
+
+    void setPropertyVariant(const QString &name, const QVariant &value);
+    void setPropertyBinding(const QString &name, const QString &expression);
+
+    bool isPositioner() const;
+
+    bool isResizable() const;
+
+    void refreshPositioner();
+
+protected:
+    PositionerNodeInstance(QQuickBasePositioner *item);
+    QQuickBasePositioner *positioner() const;
+};
+
+} // namespace Internal
+} // namespace QmlDesigner
+
+#endif // POSITIONERNODEINSTANCE_H
diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/quickitemnodeinstance.cpp b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/quickitemnodeinstance.cpp
index 634b2741264c1f0d09a1bfa5518a8224e26c46e6..f602fb9788cc3ced779a3c0f6708a53f8f19dcbe 100644
--- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/quickitemnodeinstance.cpp
+++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/quickitemnodeinstance.cpp
@@ -113,7 +113,7 @@ void QuickItemNodeInstance::setHasContent(bool hasContent)
 }
 
 
-bool anyItemHasContent(QQuickItem *graphicsItem)
+bool QuickItemNodeInstance::anyItemHasContent(QQuickItem *graphicsItem)
 {
     if (graphicsItem->flags().testFlag(QQuickItem::ItemHasContents))
         return true;
@@ -343,6 +343,9 @@ void QuickItemNodeInstance::setPropertyVariant(const QString &name, const QVaria
     ObjectNodeInstance::setPropertyVariant(name, value);
 
     refresh();
+
+    if (isInPositioner())
+        parentInstance()->refreshPositioner();
 }
 
 void QuickItemNodeInstance::setPropertyBinding(const QString &name, const QString &expression)
@@ -468,6 +471,9 @@ void QuickItemNodeInstance::resetProperty(const QString &name)
     }
 
     ObjectNodeInstance::resetProperty(name);
+
+    if (isInPositioner())
+        parentInstance()->refreshPositioner();
 }
 
 void QuickItemNodeInstance::reparent(const ObjectNodeInstance::Pointer &oldParentInstance, const QString &oldParentProperty, const ObjectNodeInstance::Pointer &newParentInstance, const QString &newParentProperty)
@@ -494,6 +500,9 @@ void QuickItemNodeInstance::reparent(const ObjectNodeInstance::Pointer &oldParen
 
     refresh();
     DesignerSupport::updateDirtyNode(quickItem());
+
+    if (isInPositioner())
+        parentInstance()->refreshPositioner();
 }
 
 static bool isValidAnchorName(const QString &name)
diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/quickitemnodeinstance.h b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/quickitemnodeinstance.h
index c14f85ea20927bc16c09dfd16f9fb8a2fdfefbcf..1331c327fca3b859e161696b0f2ab5fabdbfbeec 100644
--- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/quickitemnodeinstance.h
+++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/quickitemnodeinstance.h
@@ -117,6 +117,7 @@ protected:
     void refresh();
     QRectF boundingRectWithStepChilds(QQuickItem *parentItem) const;
     void updateDirtyNodeRecursive(QQuickItem *parentItem) const;
+    static bool anyItemHasContent(QQuickItem *graphicsItem);
 
 private: //variables
     bool m_hasHeight;
diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/servernodeinstance.cpp b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/servernodeinstance.cpp
index 6786e57eb18823a18d3fe0c7cf1bcdc17d17984c..60be2cb677a699c36decbe842ec70db441f5aa05 100644
--- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/servernodeinstance.cpp
+++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/servernodeinstance.cpp
@@ -37,7 +37,7 @@
 #include "behaviornodeinstance.h"
 #include "qmlstatenodeinstance.h"
 #include "anchorchangesnodeinstance.h"
-
+#include "positionernodeinstance.h"
 
 #include "quickitemnodeinstance.h"
 
@@ -172,15 +172,10 @@ Internal::ObjectNodeInstance::Pointer ServerNodeInstance::createInstance(QObject
 
     if (objectToBeWrapped == 0)
         instance = Internal::DummyNodeInstance::create();
-#if QT_VERSION >= 0x050000
+    else if (isSubclassOf(objectToBeWrapped, "QQuickBasePositioner"))
+        instance = Internal::PositionerNodeInstance::create(objectToBeWrapped);
     else if (isSubclassOf(objectToBeWrapped, "QQuickItem"))
         instance = Internal::QuickItemNodeInstance::create(objectToBeWrapped);
-#else
-    else if (isSubclassOf(objectToBeWrapped, "QQmlBasePositioner"))
-        instance = Internal::PositionerNodeInstance::create(objectToBeWrapped);
-    else if (isSubclassOf(objectToBeWrapped, "QQmlItem"))
-        instance = Internal::QmlGraphicsItemNodeInstance::create(objectToBeWrapped);
-#endif
     else if (isSubclassOf(objectToBeWrapped, "QQmlComponent"))
         instance = Internal::ComponentNodeInstance::create(objectToBeWrapped);
     else if (objectToBeWrapped->inherits("QQmlAnchorChanges"))
diff --git a/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/positionernodeinstance.cpp b/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/positionernodeinstance.cpp
index d90e8bbab3e9424762e915cb459735136b604e8a..31df5e4109fe62e1a5272b038c7b280c8df8cd2e 100644
--- a/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/positionernodeinstance.cpp
+++ b/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/positionernodeinstance.cpp
@@ -66,7 +66,7 @@ void PositionerNodeInstance::setPropertyBinding(const QString &name, const QStri
 }
 
 PositionerNodeInstance::Pointer PositionerNodeInstance::create(QObject *object)
-{ 
+{
     QDeclarativeBasePositioner *positioner = qobject_cast<QDeclarativeBasePositioner*>(object);
 
     Q_ASSERT(positioner);