diff --git a/src/plugins/plugins.pro b/src/plugins/plugins.pro
index 95de5cf33c4dcbc9da01213994c6ec49a939cf4d..73cf7b15e9bd6f08b754cf11d4ce62e00e837829 100644
--- a/src/plugins/plugins.pro
+++ b/src/plugins/plugins.pro
@@ -64,16 +64,18 @@ isEmpty(IDE_PACKAGE_MODE) {
 
 contains(QT_CONFIG, declarative)|!isEmpty(QT.declarative.name) {
     SUBDIRS += \
-        qmlprojectmanager \
-        qmlprofiler
+        qmlprojectmanager
 
     greaterThan(QT_MAJOR_VERSION, 4):greaterThan(QT_MINOR_VERSION, 0) {
         SUBDIRS += \
             qmldesigner \
+            qmlprofiler \
             welcome
     } else {
         warning("QmlDesigner plugin has been disabled.")
-        warning("The plugin needs at least Qt 5.1.")
+        warning("QmlProfiler plugin has been disabled.")
+        warning("Welcome plugin has been disabled.")
+        warning("These plugins need at least Qt 5.1.")
     }
 } else {
     warning("QmlProjectManager, QmlProfiler and QmlDesigner plugins have been disabled: The plugins require QtDeclarative")
diff --git a/src/plugins/qmlprofiler/canvas/qdeclarativecanvas.cpp b/src/plugins/qmlprofiler/canvas/qdeclarativecanvas.cpp
index 70a849f39b9beef68ea59ea018cefef410cef5ff..4611d7096b33f72899228d5f13caf20ff35b88a9 100644
--- a/src/plugins/qmlprofiler/canvas/qdeclarativecanvas.cpp
+++ b/src/plugins/qmlprofiler/canvas/qdeclarativecanvas.cpp
@@ -35,16 +35,14 @@
 
 QT_BEGIN_NAMESPACE
 
-Canvas::Canvas(QDeclarativeItem *parent)
-    : QDeclarativeItem(parent),
+Canvas::Canvas(QQuickPaintedItem *parent)
+    : QQuickPaintedItem(parent),
     m_context(new Context2D(this)),
     m_canvasWidth(0),
     m_canvasHeight(0),
     m_fillMode(Canvas::Stretch),
     m_color(Qt::white)
 {
-    setFlag(QGraphicsItem::ItemHasNoContents, false);
-    setCacheMode(QGraphicsItem::DeviceCoordinateCache);
 }
 
 
@@ -57,10 +55,10 @@ void Canvas::componentComplete()
 
     connect(m_context, SIGNAL(changed()), this, SLOT(requestPaint()));
     emit init();
-    QDeclarativeItem::componentComplete();
+    QQuickItem::componentComplete();
 }
 
-void Canvas::paint(QPainter *painter, const QStyleOptionGraphicsItem *, QWidget *)
+void Canvas::paint(QPainter *painter)
 {
     m_context->setInPaint(true);
     emit paint();
@@ -160,7 +158,7 @@ void Canvas::geometryChanged(const QRectF &newGeometry, const QRectF &oldGeometr
         && newGeometry.width() > 0 && newGeometry.height() > 0) {
         m_context->setSize(width(), height());
     }
-    QDeclarativeItem::geometryChanged(newGeometry, oldGeometry);
+    QQuickItem::geometryChanged(newGeometry, oldGeometry);
 }
 
 void Canvas::setCanvasWidth(int newWidth)
@@ -219,24 +217,24 @@ CanvasImage *Canvas::toImage() const
     return new CanvasImage(m_context->pixmap());
 }
 
-void Canvas::setTimeout(const QScriptValue &handler, long timeout)
+void Canvas::setTimeout(const QJSValue &handler, long timeout)
 {
-    if (handler.isFunction())
+    if (handler.isCallable())
         CanvasTimer::createTimer(this, handler, timeout, true);
 }
 
-void Canvas::setInterval(const QScriptValue &handler, long interval)
+void Canvas::setInterval(const QJSValue &handler, long interval)
 {
-    if (handler.isFunction())
+    if (handler.isCallable())
         CanvasTimer::createTimer(this, handler, interval, false);
 }
 
-void Canvas::clearTimeout(const QScriptValue &handler)
+void Canvas::clearTimeout(const QJSValue &handler)
 {
     CanvasTimer::removeTimer(handler);
 }
 
-void Canvas::clearInterval(const QScriptValue &handler)
+void Canvas::clearInterval(const QJSValue &handler)
 {
     CanvasTimer::removeTimer(handler);
 }
diff --git a/src/plugins/qmlprofiler/canvas/qdeclarativecanvas_p.h b/src/plugins/qmlprofiler/canvas/qdeclarativecanvas_p.h
index 429097d5b427af5658a3e5709776cec95c53e4e2..3f4fd8b0dd50950e7c42ca3da4924a7664456970 100644
--- a/src/plugins/qmlprofiler/canvas/qdeclarativecanvas_p.h
+++ b/src/plugins/qmlprofiler/canvas/qdeclarativecanvas_p.h
@@ -30,15 +30,14 @@
 #ifndef QDECLARATIVECANVAS_P_H
 #define QDECLARATIVECANVAS_P_H
 
-#include <qdeclarativeitem.h>
+#include <QQuickPaintedItem>
 
 #include "qdeclarativecontext2d_p.h"
 #include "qdeclarativecanvastimer_p.h"
 
 QT_BEGIN_NAMESPACE
 
-QT_MODULE(Declarative)
-class Canvas : public QDeclarativeItem
+class Canvas : public QQuickPaintedItem
 {
     Q_OBJECT
 
@@ -49,11 +48,11 @@ class Canvas : public QDeclarativeItem
     Q_PROPERTY(FillMode fillMode READ fillMode WRITE setFillMode NOTIFY fillModeChanged)
 
 public:
-    Canvas(QDeclarativeItem *parent = 0);
+    Canvas(QQuickPaintedItem *parent = 0);
     enum FillMode { Stretch, PreserveAspectFit, PreserveAspectCrop, Tile, TileVertically, TileHorizontally };
 
 
-    void paint(QPainter *, const QStyleOptionGraphicsItem *, QWidget *);
+    void paint(QPainter *);
     void geometryChanged(const QRectF &newGeometry, const QRectF &oldGeometry);
     void setCanvasWidth(int newWidth);
     int canvasWidth() {return m_canvasWidth;}
@@ -78,10 +77,10 @@ public Q_SLOTS:
     bool save(const QString& filename) const;
 
     // Timers
-    void setInterval(const QScriptValue &handler, long timeout);
-    void setTimeout(const QScriptValue &handler, long timeout);
-    void clearInterval(const QScriptValue &handler);
-    void clearTimeout(const QScriptValue &handler);
+    void setInterval(const QJSValue &handler, long timeout);
+    void setTimeout(const QJSValue &handler, long timeout);
+    void clearInterval(const QJSValue &handler);
+    void clearTimeout(const QJSValue &handler);
 
 Q_SIGNALS:
     void fillModeChanged();
diff --git a/src/plugins/qmlprofiler/canvas/qdeclarativecanvastimer.cpp b/src/plugins/qmlprofiler/canvas/qdeclarativecanvastimer.cpp
index 4d41aec983b0ab992a9657178219b62191906dfd..8069fbbcb70b586d4fd5100959c89a6af621efed 100644
--- a/src/plugins/qmlprofiler/canvas/qdeclarativecanvastimer.cpp
+++ b/src/plugins/qmlprofiler/canvas/qdeclarativecanvastimer.cpp
@@ -29,28 +29,28 @@
 
 #include "qdeclarativecanvastimer_p.h"
 
-#include <qscriptengine.h>
-#include <qscriptvalue.h>
+#include <QJSEngine>
+#include <QJSValue>
 #include <qtimer.h>
 
 QT_BEGIN_NAMESPACE
 
 Q_GLOBAL_STATIC(QList<CanvasTimer*> , activeTimers);
 
-CanvasTimer::CanvasTimer(QObject *parent, const QScriptValue &data)
+CanvasTimer::CanvasTimer(QObject *parent, const QJSValue &data)
     : QTimer(parent), m_value(data)
 {
 }
 
 void CanvasTimer::handleTimeout()
 {
-    Q_ASSERT(m_value.isFunction());
+    Q_ASSERT(m_value.isCallable());
     m_value.call();
     if (isSingleShot())
         removeTimer(this);
 }
 
-void CanvasTimer::createTimer(QObject *parent, const QScriptValue &val, long timeout, bool singleshot)
+void CanvasTimer::createTimer(QObject *parent, const QJSValue &val, long timeout, bool singleshot)
 {
 
     CanvasTimer *timer = new CanvasTimer(parent, val);
@@ -67,9 +67,9 @@ void CanvasTimer::removeTimer(CanvasTimer *timer)
     timer->deleteLater();
 }
 
-void CanvasTimer::removeTimer(const QScriptValue &val)
+void CanvasTimer::removeTimer(const QJSValue &val)
 {
-    if (!val.isFunction())
+    if (!val.isCallable())
         return;
 
     for (int i = 0 ; i < activeTimers()->count() ; ++i) {
diff --git a/src/plugins/qmlprofiler/canvas/qdeclarativecanvastimer_p.h b/src/plugins/qmlprofiler/canvas/qdeclarativecanvastimer_p.h
index 915afa542dd62039640779a86344ee8a2c8da7f2..b25a98eb44f639f6ebb1dd1b5c31af3d18dc68cb 100644
--- a/src/plugins/qmlprofiler/canvas/qdeclarativecanvastimer_p.h
+++ b/src/plugins/qmlprofiler/canvas/qdeclarativecanvastimer_p.h
@@ -30,32 +30,30 @@
 #ifndef QDECLARATIVECANVASTIMER_P_H
 #define QDECLARATIVECANVASTIMER_P_H
 
-#include <qscriptvalue.h>
+#include <QJSValue>
 #include <qtimer.h>
 #include <qlist.h>
 
 QT_BEGIN_NAMESPACE
 
-QT_MODULE(Declarative)
-
 class CanvasTimer : public QTimer
 {
     Q_OBJECT
 
 public:
-    CanvasTimer(QObject *parent, const QScriptValue &data);
+    CanvasTimer(QObject *parent, const QJSValue &data);
 
 public Q_SLOTS:
     void handleTimeout();
-    bool equals(const QScriptValue &value){return m_value.equals(value);}
+    bool equals(const QJSValue &value){return m_value.equals(value);}
 
 public:
-    static void createTimer(QObject *parent, const QScriptValue &val, long timeout, bool singleshot);
+    static void createTimer(QObject *parent, const QJSValue &val, long timeout, bool singleshot);
     static void removeTimer(CanvasTimer *timer);
-    static void removeTimer(const QScriptValue &);
+    static void removeTimer(const QJSValue &);
 
 private:
-    QScriptValue m_value;
+    QJSValue m_value;
 
 };
 
diff --git a/src/plugins/qmlprofiler/canvas/qdeclarativecontext2d.cpp b/src/plugins/qmlprofiler/canvas/qdeclarativecontext2d.cpp
index 5121aac3320d2395fa2390d980b0a95b07a8d04f..be092b12ad7bb93b39959336bb6ad2e032538b46 100644
--- a/src/plugins/qmlprofiler/canvas/qdeclarativecontext2d.cpp
+++ b/src/plugins/qmlprofiler/canvas/qdeclarativecontext2d.cpp
@@ -39,6 +39,7 @@
 #include <qgraphicseffect.h>
 
 #include <QImage>
+#include <QWidget>
 
 QT_BEGIN_NAMESPACE
 
@@ -737,8 +738,8 @@ void Context2D::strokeRect(qreal x, qreal y, qreal w, qreal h)
     scheduleChange();
 }
 
-void Context2D::mouseArea(qreal x, qreal y, qreal w, qreal h, const QScriptValue &callback,
-                          const QScriptValue &data)
+void Context2D::mouseArea(qreal x, qreal y, qreal w, qreal h, const QJSValue &callback,
+                          const QJSValue &data)
 {
     MouseArea a = { callback, data, QRectF(x, y, w, h), m_state.matrix };
     m_mouseAreas << a;
@@ -1103,9 +1104,14 @@ void Context2D::setPainterTranslate(const QPoint &translate)
 }
 
 void Context2D::scheduleChange()
+{
+    QMetaObject::invokeMethod(this, "onScheduleChange", Qt::QueuedConnection, Q_ARG(int, 0));
+}
+
+void Context2D::onScheduleChange(int interval)
 {
     if (m_changeTimerId == -1 && !m_inPaint)
-        m_changeTimerId = startTimer(0);
+        m_changeTimerId = startTimer(interval);
 }
 
 void Context2D::timerEvent(QTimerEvent *e)
diff --git a/src/plugins/qmlprofiler/canvas/qdeclarativecontext2d_p.h b/src/plugins/qmlprofiler/canvas/qdeclarativecontext2d_p.h
index 71838757689831f718e2e661b59fc03427f61976..cd84e1fa2b31487e8241910bbd225cf664790f27 100644
--- a/src/plugins/qmlprofiler/canvas/qdeclarativecontext2d_p.h
+++ b/src/plugins/qmlprofiler/canvas/qdeclarativecontext2d_p.h
@@ -38,11 +38,10 @@
 #include <qmetatype.h>
 #include <qcoreevent.h>
 #include <qvariant.h>
-#include <qscriptvalue.h>
 
-QT_BEGIN_NAMESPACE
+#include <QJSValue>
 
-QT_MODULE(Declarative)
+QT_BEGIN_NAMESPACE
 
 QColor colorFromString(const QString &name);
 
@@ -174,8 +173,8 @@ public:
     void setShadowColor(const QString &str);
 
     struct MouseArea {
-        QScriptValue callback;
-        QScriptValue data;
+        QJSValue callback;
+        QJSValue data;
         QRectF rect;
         QMatrix matrix;
     };
@@ -209,7 +208,7 @@ public slots:
     void strokeRect(qreal x, qreal y, qreal w, qreal h);
 
     // mouse
-    void mouseArea(qreal x, qreal y, qreal w, qreal h, const QScriptValue &, const QScriptValue & = QScriptValue());
+    void mouseArea(qreal x, qreal y, qreal w, qreal h, const QJSValue &, const QJSValue & = QJSValue());
 
     // path API
     void beginPath();
@@ -239,6 +238,9 @@ public slots:
     void putImageData(ImageData image, qreal dx, qreal dy);
     void endPainting();
 
+private slots:
+    void onScheduleChange(int interval);
+
 signals:
     void changed();
 
diff --git a/src/plugins/qmlprofiler/canvas/qmlprofilercanvas.cpp b/src/plugins/qmlprofiler/canvas/qmlprofilercanvas.cpp
index 01e3b3cdda17a0ce3c01b91881003af055d5a327..e07868086399c3d2505bce4731248b1b6e1e0692 100644
--- a/src/plugins/qmlprofiler/canvas/qmlprofilercanvas.cpp
+++ b/src/plugins/qmlprofiler/canvas/qmlprofilercanvas.cpp
@@ -41,9 +41,7 @@ QmlProfilerCanvas::QmlProfilerCanvas()
     : m_context2d(new Context2D(this))
     , m_dirty(true)
 {
-    setFlag(QGraphicsItem::ItemHasNoContents, false);
     setAcceptedMouseButtons(Qt::LeftButton);
-    setCacheMode(QGraphicsItem::DeviceCoordinateCache);
 }
 
 void QmlProfilerCanvas::requestPaint()
@@ -57,7 +55,7 @@ void QmlProfilerCanvas::requestRedraw()
     update();
 }
 
-void QmlProfilerCanvas::paint(QPainter *p, const QStyleOptionGraphicsItem *, QWidget *)
+void QmlProfilerCanvas::paint(QPainter *p)
 {
     if (m_context2d->size().width() != width() || m_context2d->size().height() != height()) {
         m_dirty = true;
@@ -84,7 +82,7 @@ void QmlProfilerCanvas::componentComplete()
         if (p.hasNotifySignal())
             QMetaObject::connect(this, p.notifySignalIndex(), this, requestPaintMethod, 0, 0);
     }
-    QDeclarativeItem::componentComplete();
+    QQuickItem::componentComplete();
 }
 
 }
diff --git a/src/plugins/qmlprofiler/canvas/qmlprofilercanvas.h b/src/plugins/qmlprofiler/canvas/qmlprofilercanvas.h
index 51289d8b964b2b27722617ecb72e159ba21eafd8..f7837f2ed0695f9bb4064fea5a954288698a73b0 100644
--- a/src/plugins/qmlprofiler/canvas/qmlprofilercanvas.h
+++ b/src/plugins/qmlprofiler/canvas/qmlprofilercanvas.h
@@ -30,7 +30,7 @@
 #ifndef QMLPROFILERCANVAS_H
 #define QMLPROFILERCANVAS_H
 
-#include <QDeclarativeItem>
+#include <QQuickPaintedItem>
 
 QT_BEGIN_NAMESPACE
 class Context2D;
@@ -39,7 +39,7 @@ QT_END_NAMESPACE
 namespace QmlProfiler {
 namespace Internal {
 
-class QmlProfilerCanvas : public QDeclarativeItem
+class QmlProfilerCanvas : public QQuickPaintedItem
 {
     Q_OBJECT
 
@@ -67,7 +67,7 @@ public slots:
     void requestRedraw();
 
 protected:
-    virtual void paint(QPainter *, const QStyleOptionGraphicsItem *, QWidget *);
+    virtual void paint(QPainter *);
     virtual void componentComplete();
 
 private:
diff --git a/src/plugins/qmlprofiler/qml/Detail.qml b/src/plugins/qmlprofiler/qml/Detail.qml
index 7bc28178d99a1d10fe39a59a76eda19f6a473321..6eab0bbc3d3690d8121d4b1f85a17ff8ff394ec2 100644
--- a/src/plugins/qmlprofiler/qml/Detail.qml
+++ b/src/plugins/qmlprofiler/qml/Detail.qml
@@ -27,7 +27,7 @@
 **
 ****************************************************************************/
 
-import QtQuick 1.0
+import QtQuick 2.0
 import Monitor 1.0
 
 Item {
diff --git a/src/plugins/qmlprofiler/qml/Label.qml b/src/plugins/qmlprofiler/qml/Label.qml
index 015391a3f53947a1c6e3d2b5c1bad30540740ee3..608bb53f766060768b17cf6e4cfd3bdf385edf5c 100644
--- a/src/plugins/qmlprofiler/qml/Label.qml
+++ b/src/plugins/qmlprofiler/qml/Label.qml
@@ -27,7 +27,7 @@
 **
 ****************************************************************************/
 
-import QtQuick 1.0
+import QtQuick 2.0
 
 Item {
     id: labelContainer
diff --git a/src/plugins/qmlprofiler/qml/MainView.qml b/src/plugins/qmlprofiler/qml/MainView.qml
index 9e859258ee7bf96945ac426f20ea6e5dbc4f2c58..0cdb3b81eaa9d03176d3ab80f7b883f3a9afe049 100644
--- a/src/plugins/qmlprofiler/qml/MainView.qml
+++ b/src/plugins/qmlprofiler/qml/MainView.qml
@@ -27,7 +27,7 @@
 **
 ****************************************************************************/
 
-import QtQuick 1.0
+import QtQuick 2.0
 import Monitor 1.0
 
 Rectangle {
@@ -502,7 +502,7 @@ Rectangle {
             onPressed:  {
                 selectionRange.pressedOnCreation();
             }
-            onMousePositionChanged: {
+            onPositionChanged: {
                 selectionRange.movedOnCreation();
             }
         }
diff --git a/src/plugins/qmlprofiler/qml/Overview.qml b/src/plugins/qmlprofiler/qml/Overview.qml
index d90e1e6c7dcb2a678ef13fdd5198868aad2774ad..42bc387e19c24811c3e1c6efb4c7c7bc0203279a 100644
--- a/src/plugins/qmlprofiler/qml/Overview.qml
+++ b/src/plugins/qmlprofiler/qml/Overview.qml
@@ -27,7 +27,7 @@
 **
 ****************************************************************************/
 
-import QtQuick 1.0
+import QtQuick 2.0
 import Monitor 1.0
 import "Overview.js" as Plotter
 
@@ -108,7 +108,7 @@ Canvas2D {
         onPressed: {
             jumpTo(mouse.x);
         }
-        onMousePositionChanged: {
+        onPositionChanged: {
             jumpTo(mouse.x);
         }
     }
diff --git a/src/plugins/qmlprofiler/qml/RangeDetails.qml b/src/plugins/qmlprofiler/qml/RangeDetails.qml
index a0fb3e8d7791cb84d61c52bb2986aa7ca4f46b2e..dae4db3818e7f95dc3724836064003832c1ada6f 100644
--- a/src/plugins/qmlprofiler/qml/RangeDetails.qml
+++ b/src/plugins/qmlprofiler/qml/RangeDetails.qml
@@ -27,7 +27,7 @@
 **
 ****************************************************************************/
 
-import QtQuick 1.0
+import QtQuick 2.0
 import Monitor 1.0
 
 Item {
diff --git a/src/plugins/qmlprofiler/qml/RangeMover.qml b/src/plugins/qmlprofiler/qml/RangeMover.qml
index 18226d8d25f37d7ceda70e6d61eaa0136e146118..4e1fa4290c9746fa47966cdbe29e59a620c76566 100644
--- a/src/plugins/qmlprofiler/qml/RangeMover.qml
+++ b/src/plugins/qmlprofiler/qml/RangeMover.qml
@@ -27,7 +27,7 @@
 **
 ****************************************************************************/
 
-import QtQuick 1.0
+import QtQuick 2.0
 
 Rectangle {
     id: rangeMover
diff --git a/src/plugins/qmlprofiler/qml/SelectionRange.qml b/src/plugins/qmlprofiler/qml/SelectionRange.qml
index b302de614a7962d8eabec5dbd7c376f76628698d..6079b0713596694014fbe6d592b59c46dae24cc8 100644
--- a/src/plugins/qmlprofiler/qml/SelectionRange.qml
+++ b/src/plugins/qmlprofiler/qml/SelectionRange.qml
@@ -27,7 +27,7 @@
 **
 ****************************************************************************/
 
-import QtQuick 1.0
+import QtQuick 2.0
 
 Rectangle {
     id: selectionRange
diff --git a/src/plugins/qmlprofiler/qml/SelectionRangeDetails.qml b/src/plugins/qmlprofiler/qml/SelectionRangeDetails.qml
index 5af24af14da7b26c3b9b51a6c75de7311e0025f7..529bf3b980f361687d99c7868fb6b27cdb4d4e1f 100644
--- a/src/plugins/qmlprofiler/qml/SelectionRangeDetails.qml
+++ b/src/plugins/qmlprofiler/qml/SelectionRangeDetails.qml
@@ -27,7 +27,7 @@
 **
 ****************************************************************************/
 
-import QtQuick 1.0
+import QtQuick 2.0
 import Monitor 1.0
 
 Item {
diff --git a/src/plugins/qmlprofiler/qml/TimeDisplay.qml b/src/plugins/qmlprofiler/qml/TimeDisplay.qml
index 2f5a8bfaafaa52f9968c8a53d112dc81274b1988..dd6ece6083894e81adf643bee2bc45351a3f61ec 100644
--- a/src/plugins/qmlprofiler/qml/TimeDisplay.qml
+++ b/src/plugins/qmlprofiler/qml/TimeDisplay.qml
@@ -27,7 +27,7 @@
 **
 ****************************************************************************/
 
-import QtQuick 1.0
+import QtQuick 2.0
 import Monitor 1.0
 
 Canvas2D {
diff --git a/src/plugins/qmlprofiler/qml/TimeMarks.qml b/src/plugins/qmlprofiler/qml/TimeMarks.qml
index f2ba65f66e746c863ffa651922e2fc79567dc6bf..742bc0962950cbbce8858afbb59721032473cdf4 100644
--- a/src/plugins/qmlprofiler/qml/TimeMarks.qml
+++ b/src/plugins/qmlprofiler/qml/TimeMarks.qml
@@ -27,7 +27,7 @@
 **
 ****************************************************************************/
 
-import QtQuick 1.0
+import QtQuick 2.0
 import Monitor 1.0
 
 Canvas2D {
diff --git a/src/plugins/qmlprofiler/qmlprofiler.pro b/src/plugins/qmlprofiler/qmlprofiler.pro
index c9f7ba7ed7f040589284e041fd71eb44dcbfe044..f5b68699d5dc73fe4cdf5bc0cb46b18139c25f87 100644
--- a/src/plugins/qmlprofiler/qmlprofiler.pro
+++ b/src/plugins/qmlprofiler/qmlprofiler.pro
@@ -1,6 +1,6 @@
 DEFINES += QMLPROFILER_LIBRARY
 
-QT += network script declarative
+QT += network qml quick
 
 include(../../qtcreatorplugin.pri)
 include(canvas/canvas.pri)
diff --git a/src/plugins/qmlprofiler/qmlprofiler.qbs b/src/plugins/qmlprofiler/qmlprofiler.qbs
index 82bf351cf8193921151fe3c6efcd6830f4d9404b..48df39e062a9431f1496c0f260bef8f86a6e6f07 100644
--- a/src/plugins/qmlprofiler/qmlprofiler.qbs
+++ b/src/plugins/qmlprofiler/qmlprofiler.qbs
@@ -5,7 +5,7 @@ import "../QtcPlugin.qbs" as QtcPlugin
 QtcPlugin {
     name: "QmlProfiler"
 
-    Depends { name: "Qt"; submodules: ["widgets", "network", "script", "declarative"] }
+    Depends { name: "Qt"; submodules: ["widgets", "network", "qml", "quick"] }
     Depends { name: "Core" }
     Depends { name: "AnalyzerBase" }
     Depends { name: "QmlProjectManager" }
diff --git a/src/plugins/qmlprofiler/qmlprofilertraceview.cpp b/src/plugins/qmlprofiler/qmlprofilertraceview.cpp
index c094a07f131863d48804df3ab1b88b2e3c7cbbce..76874e92729091428c2722883d0e558ed3042b50 100644
--- a/src/plugins/qmlprofiler/qmlprofilertraceview.cpp
+++ b/src/plugins/qmlprofiler/qmlprofilertraceview.cpp
@@ -42,7 +42,7 @@
 
 #include <utils/styledbar.h>
 
-#include <QDeclarativeContext>
+#include <QQmlContext>
 #include <QToolButton>
 #include <QEvent>
 #include <QVBoxLayout>
@@ -50,6 +50,7 @@
 #include <QScrollBar>
 #include <QSlider>
 #include <QMenu>
+#include <QQuickItem>
 
 #include <math.h>
 
@@ -86,23 +87,22 @@ void ZoomControl::setRange(qint64 startTime, qint64 endTime)
 }
 
 /////////////////////////////////////////////////////////
-ScrollableDeclarativeView::ScrollableDeclarativeView(QWidget *parent)
-    : QDeclarativeView(parent)
+ScrollableQuickView::ScrollableQuickView(QQuickView *parent)
+    : QQuickView(parent)
 {
 }
 
-ScrollableDeclarativeView::~ScrollableDeclarativeView()
+ScrollableQuickView::~ScrollableQuickView()
 {
 }
 
-void ScrollableDeclarativeView::scrollContentsBy(int dx, int dy)
+void ScrollableQuickView::scrollContentsBy(int /*dx*/, int dy)
 {
     // special workaround to track the scrollbar
     if (rootObject()) {
         int scrollY = rootObject()->property("scrollY").toInt();
         rootObject()->setProperty("scrollY", QVariant(scrollY - dy));
     }
-    QDeclarativeView::scrollContentsBy(dx,dy);
 }
 
 /////////////////////////////////////////////////////////
@@ -110,6 +110,13 @@ class QmlProfilerTraceView::QmlProfilerTraceViewPrivate
 {
 public:
     QmlProfilerTraceViewPrivate(QmlProfilerTraceView *qq) : q(qq) {}
+    ~QmlProfilerTraceViewPrivate()
+    {
+        delete m_mainView;
+        delete m_timebar;
+        delete m_overview;
+    }
+
     QmlProfilerTraceView *q;
 
     QmlProfilerStateManager *m_profilerState;
@@ -118,9 +125,9 @@ public:
 
     QSize m_sizeHint;
 
-    ScrollableDeclarativeView *m_mainView;
-    QDeclarativeView *m_timebar;
-    QDeclarativeView *m_overview;
+    ScrollableQuickView *m_mainView;
+    QQuickView *m_timebar;
+    QQuickView *m_overview;
     QmlProfilerModelManager *m_modelManager;
     TimelineModelAggregator *m_modelProxy;
 
@@ -145,40 +152,38 @@ QmlProfilerTraceView::QmlProfilerTraceView(QWidget *parent, Analyzer::IAnalyzerT
     groupLayout->setContentsMargins(0, 0, 0, 0);
     groupLayout->setSpacing(0);
 
-    d->m_mainView = new ScrollableDeclarativeView(this);
-    d->m_mainView->setResizeMode(QDeclarativeView::SizeViewToRootObject);
-    d->m_mainView->setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded);
-    d->m_mainView->setBackgroundBrush(QBrush(Qt::white));
-    d->m_mainView->setAlignment(Qt::AlignLeft | Qt::AlignTop);
-    d->m_mainView->setFocus();
+    d->m_mainView = new ScrollableQuickView();
+    d->m_mainView->setResizeMode(QQuickView::SizeViewToRootObject);
+    QWidget *mainViewContainer = QWidget::createWindowContainer(d->m_mainView);
 
     MouseWheelResizer *resizer = new MouseWheelResizer(this);
     connect(resizer,SIGNAL(mouseWheelMoved(int,int,int)), this, SLOT(mouseWheelMoved(int,int,int)));
-    d->m_mainView->viewport()->installEventFilter(resizer);
 
     QHBoxLayout *toolsLayout = new QHBoxLayout;
 
-    d->m_timebar = new QDeclarativeView(this);
-    d->m_timebar->setResizeMode(QDeclarativeView::SizeRootObjectToView);
-    d->m_timebar->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
-    d->m_timebar->setFixedHeight(24);
+    d->m_timebar = new QQuickView();
+    d->m_timebar->setResizeMode(QQuickView::SizeRootObjectToView);
+    QWidget *timeBarContainer = QWidget::createWindowContainer(d->m_timebar);
+    timeBarContainer->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
+    timeBarContainer->setFixedHeight(24);
 
-    d->m_overview = new QDeclarativeView(this);
-    d->m_overview->setResizeMode(QDeclarativeView::SizeRootObjectToView);
-    d->m_overview->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
-    d->m_overview->setMaximumHeight(50);
+    d->m_overview = new QQuickView();
+    d->m_overview->setResizeMode(QQuickView::SizeRootObjectToView);
+    QWidget *overviewContainer = QWidget::createWindowContainer(d->m_overview);
+    overviewContainer->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
+    overviewContainer->setMaximumHeight(50);
 
     d->m_zoomToolbar = createZoomToolbar();
     d->m_zoomToolbar->move(0, d->m_timebar->height());
     d->m_zoomToolbar->setVisible(false);
 
     toolsLayout->addWidget(createToolbar());
-    toolsLayout->addWidget(d->m_timebar);
+    toolsLayout->addWidget(timeBarContainer);
     emit enableToolbar(false);
 
     groupLayout->addLayout(toolsLayout);
-    groupLayout->addWidget(d->m_mainView);
-    groupLayout->addWidget(d->m_overview);
+    groupLayout->addWidget(mainViewContainer);
+    groupLayout->addWidget(overviewContainer);
 
     setLayout(groupLayout);
 
@@ -224,7 +229,7 @@ void QmlProfilerTraceView::reset()
     d->m_overview->setSource(QUrl(QLatin1String("qrc:/qmlprofiler/Overview.qml")));
 
     d->m_mainView->setSource(QUrl(QLatin1String("qrc:/qmlprofiler/MainView.qml")));
-    QGraphicsObject *rootObject = d->m_mainView->rootObject();
+    QQuickItem *rootObject = d->m_mainView->rootObject();
     rootObject->setProperty("width", QVariant(width()));
     rootObject->setProperty("candidateHeight", QVariant(height() - d->m_timebar->height() - d->m_overview->height()));
 
@@ -345,7 +350,7 @@ QWidget *QmlProfilerTraceView::createZoomToolbar()
 /////////////////////////////////////////////////////////
 bool QmlProfilerTraceView::hasValidSelection() const
 {
-    QGraphicsObject *rootObject = d->m_mainView->rootObject();
+    QQuickItem *rootObject = d->m_mainView->rootObject();
     if (rootObject)
         return rootObject->property("selectionRangeReady").toBool();
     return false;
@@ -353,7 +358,7 @@ bool QmlProfilerTraceView::hasValidSelection() const
 
 qint64 QmlProfilerTraceView::selectionStart() const
 {
-    QGraphicsObject *rootObject = d->m_mainView->rootObject();
+    QQuickItem *rootObject = d->m_mainView->rootObject();
     if (rootObject)
         return rootObject->property("selectionRangeStart").toLongLong();
     return 0;
@@ -361,7 +366,7 @@ qint64 QmlProfilerTraceView::selectionStart() const
 
 qint64 QmlProfilerTraceView::selectionEnd() const
 {
-    QGraphicsObject *rootObject = d->m_mainView->rootObject();
+    QQuickItem *rootObject = d->m_mainView->rootObject();
     if (rootObject)
         return rootObject->property("selectionRangeEnd").toLongLong();
     return 0;
@@ -380,7 +385,7 @@ void QmlProfilerTraceView::clearDisplay()
 
 void QmlProfilerTraceView::selectNextEventByHash(const QString &hash)
 {
-    QGraphicsObject *rootObject = d->m_mainView->rootObject();
+    QQuickItem *rootObject = d->m_mainView->rootObject();
 
     if (rootObject)
         QMetaObject::invokeMethod(rootObject, "selectNextByHash",
@@ -392,7 +397,7 @@ void QmlProfilerTraceView::selectNextEventByLocation(const QString &filename, co
     int eventId = d->m_modelProxy->getEventIdForLocation(filename, line, column);
 
     if (eventId != -1) {
-        QGraphicsObject *rootObject = d->m_mainView->rootObject();
+        QQuickItem *rootObject = d->m_mainView->rootObject();
         if (rootObject)
             QMetaObject::invokeMethod(rootObject, "selectNextById",
                                       Q_ARG(QVariant,QVariant(eventId)));
@@ -403,7 +408,7 @@ void QmlProfilerTraceView::selectNextEventByLocation(const QString &filename, co
 // Goto source location
 void QmlProfilerTraceView::updateCursorPosition()
 {
-    QGraphicsObject *rootObject = d->m_mainView->rootObject();
+    QQuickItem *rootObject = d->m_mainView->rootObject();
     emit gotoSourceLocation(rootObject->property("fileName").toString(),
                             rootObject->property("lineNumber").toInt(),
                             rootObject->property("columnNumber").toInt());
@@ -413,7 +418,7 @@ void QmlProfilerTraceView::updateCursorPosition()
 // Toolbar buttons
 void QmlProfilerTraceView::toggleRangeMode(bool active)
 {
-    QGraphicsObject *rootObject = d->m_mainView->rootObject();
+    QQuickItem *rootObject = d->m_mainView->rootObject();
     bool rangeMode = rootObject->property("selectionRangeMode").toBool();
     if (active != rangeMode) {
         if (active)
@@ -436,7 +441,7 @@ void QmlProfilerTraceView::updateRangeButton()
 
 void QmlProfilerTraceView::toggleLockMode(bool active)
 {
-    QGraphicsObject *rootObject = d->m_mainView->rootObject();
+    QQuickItem *rootObject = d->m_mainView->rootObject();
     bool lockMode = !rootObject->property("selectionLocked").toBool();
     if (active != lockMode) {
         rootObject->setProperty("selectionLocked", QVariant(!active));
@@ -480,7 +485,7 @@ void QmlProfilerTraceView::updateRange()
 void QmlProfilerTraceView::mouseWheelMoved(int mouseX, int mouseY, int wheelDelta)
 {
     Q_UNUSED(mouseY);
-    QGraphicsObject *rootObject = d->m_mainView->rootObject();
+    QQuickItem *rootObject = d->m_mainView->rootObject();
     if (rootObject) {
         QMetaObject::invokeMethod(rootObject, "wheelZoom",
                                   Q_ARG(QVariant, QVariant(mouseX)),
@@ -493,15 +498,14 @@ void QmlProfilerTraceView::updateToolTip(const QString &text)
     setToolTip(text);
 }
 
-void QmlProfilerTraceView::updateVerticalScroll(int newPosition)
+void QmlProfilerTraceView::updateVerticalScroll(int /*newPosition*/)
 {
-    d->m_mainView->verticalScrollBar()->setValue(newPosition);
 }
 
 void QmlProfilerTraceView::resizeEvent(QResizeEvent *event)
 {
     QWidget::resizeEvent(event);
-    QGraphicsObject *rootObject = d->m_mainView->rootObject();
+    QQuickItem *rootObject = d->m_mainView->rootObject();
     if (rootObject) {
         rootObject->setProperty("width", QVariant(event->size().width()));
         int newHeight = event->size().height() - d->m_timebar->height() - d->m_overview->height();
@@ -560,14 +564,14 @@ void QmlProfilerTraceView::contextMenuEvent(QContextMenuEvent *ev)
 // Tell QML the state of the profiler
 void QmlProfilerTraceView::setRecording(bool recording)
 {
-    QGraphicsObject *rootObject = d->m_mainView->rootObject();
+    QQuickItem *rootObject = d->m_mainView->rootObject();
     if (rootObject)
         rootObject->setProperty("recordingEnabled", QVariant(recording));
 }
 
 void QmlProfilerTraceView::setAppKilled()
 {
-    QGraphicsObject *rootObject = d->m_mainView->rootObject();
+    QQuickItem *rootObject = d->m_mainView->rootObject();
     if (rootObject)
         rootObject->setProperty("appKilled",QVariant(true));
 }
diff --git a/src/plugins/qmlprofiler/qmlprofilertraceview.h b/src/plugins/qmlprofiler/qmlprofilertraceview.h
index dd7d233ff082c2471f6889053983333ff86e7b0c..985838f7aa68213760651174d9df5e0028ab1521 100644
--- a/src/plugins/qmlprofiler/qmlprofilertraceview.h
+++ b/src/plugins/qmlprofiler/qmlprofilertraceview.h
@@ -30,7 +30,8 @@
 #ifndef QMLPROFILERTRACEVIEW_H
 #define QMLPROFILERTRACEVIEW_H
 
-#include <QDeclarativeView>
+#include <QQuickView>
+#include <QWidget>
 
 namespace Analyzer {
 class IAnalyzerTool;
@@ -74,12 +75,12 @@ private:
     qint64 m_endTime;
 };
 
-class ScrollableDeclarativeView : public QDeclarativeView
+class ScrollableQuickView : public QQuickView
 {
     Q_OBJECT
 public:
-    explicit ScrollableDeclarativeView(QWidget *parent = 0);
-    ~ScrollableDeclarativeView();
+    explicit ScrollableQuickView(QQuickView *parent = 0);
+    ~ScrollableQuickView();
 protected:
     void scrollContentsBy(int dx, int dy);
 };
diff --git a/src/plugins/qmlprofiler/timelinerenderer.cpp b/src/plugins/qmlprofiler/timelinerenderer.cpp
index 4f86f2cd9a39a19348c7f4d655138ad6052ddee7..77d895cf249b855949117a928349e75217c2c314 100644
--- a/src/plugins/qmlprofiler/timelinerenderer.cpp
+++ b/src/plugins/qmlprofiler/timelinerenderer.cpp
@@ -29,8 +29,8 @@
 
 #include "timelinerenderer.h"
 
-#include <qdeclarativecontext.h>
-#include <qdeclarativeproperty.h>
+#include <QQmlContext>
+#include <QQmlProperty>
 #include <QTimer>
 #include <QPixmap>
 #include <QPainter>
@@ -43,13 +43,12 @@ using namespace QmlProfiler::Internal;
 
 const int DefaultRowHeight = 30;
 
-TimelineRenderer::TimelineRenderer(QDeclarativeItem *parent) :
-    QDeclarativeItem(parent), m_startTime(0), m_endTime(0), m_spacing(0),
+TimelineRenderer::TimelineRenderer(QQuickPaintedItem *parent) :
+    QQuickPaintedItem(parent), m_startTime(0), m_endTime(0), m_spacing(0),
     m_lastStartTime(0), m_lastEndTime(0)
   , m_profilerModelProxy(0)
 {
     clearData();
-    setFlag(QGraphicsItem::ItemHasNoContents, false);
     setAcceptedMouseButtons(Qt::LeftButton);
     setAcceptHoverEvents(true);
 }
@@ -77,7 +76,7 @@ void TimelineRenderer::componentComplete()
         if (p.hasNotifySignal())
             QMetaObject::connect(this, p.notifySignalIndex(), this, requestPaintMethod, 0, 0);
     }
-    QDeclarativeItem::componentComplete();
+    QQuickItem::componentComplete();
 }
 
 void TimelineRenderer::requestPaint()
@@ -85,7 +84,7 @@ void TimelineRenderer::requestPaint()
     update();
 }
 
-void TimelineRenderer::paint(QPainter *p, const QStyleOptionGraphicsItem *, QWidget *)
+void TimelineRenderer::paint(QPainter *p)
 {
     qint64 windowDuration = m_endTime - m_startTime;
     if (windowDuration <= 0)
@@ -260,7 +259,7 @@ int TimelineRenderer::modelFromPosition(int y)
     return 0;
 }
 
-void TimelineRenderer::mousePressEvent(QGraphicsSceneMouseEvent *event)
+void TimelineRenderer::mousePressEvent(QMouseEvent *event)
 {
     // special case: if there is a drag area below me, don't accept the
     // events unless I'm actually clicking inside an item
@@ -271,19 +270,19 @@ void TimelineRenderer::mousePressEvent(QGraphicsSceneMouseEvent *event)
 
 }
 
-void TimelineRenderer::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
+void TimelineRenderer::mouseReleaseEvent(QMouseEvent *event)
 {
     Q_UNUSED(event);
     manageClicked();
 }
 
-void TimelineRenderer::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
+void TimelineRenderer::mouseMoveEvent(QMouseEvent *event)
 {
     event->setAccepted(false);
 }
 
 
-void TimelineRenderer::hoverMoveEvent(QGraphicsSceneHoverEvent *event)
+void TimelineRenderer::hoverMoveEvent(QHoverEvent *event)
 {
     Q_UNUSED(event);
     manageHovered(event->pos().x(), event->pos().y());
diff --git a/src/plugins/qmlprofiler/timelinerenderer.h b/src/plugins/qmlprofiler/timelinerenderer.h
index d4c70a4d9ed01d664aca07e7efc7d810c0103dc3..e5018565d72bbc483aa64d2ddff435a42fd910e6 100644
--- a/src/plugins/qmlprofiler/timelinerenderer.h
+++ b/src/plugins/qmlprofiler/timelinerenderer.h
@@ -30,15 +30,15 @@
 #ifndef TIMELINERENDERER_H
 #define TIMELINERENDERER_H
 
-#include <QDeclarativeItem>
-#include <QScriptValue>
+#include <QQuickPaintedItem>
+#include <QJSValue>
 #include "qmlprofilertimelinemodelproxy.h"
 #include "timelinemodelaggregator.h"
 
 namespace QmlProfiler {
 namespace Internal {
 
-class TimelineRenderer : public QDeclarativeItem
+class TimelineRenderer : public QQuickPaintedItem
 {
     Q_OBJECT
     Q_PROPERTY(qint64 startTime READ startTime WRITE setStartTime NOTIFY startTimeChanged)
@@ -51,7 +51,7 @@ class TimelineRenderer : public QDeclarativeItem
     Q_PROPERTY(int endDragArea READ endDragArea WRITE setEndDragArea NOTIFY endDragAreaChanged)
 
 public:
-    explicit TimelineRenderer(QDeclarativeItem *parent = 0);
+    explicit TimelineRenderer(QQuickPaintedItem *parent = 0);
 
     qint64 startTime() const
     {
@@ -176,12 +176,12 @@ public slots:
     }
 
 protected:
-    virtual void paint(QPainter *, const QStyleOptionGraphicsItem *, QWidget *);
+    virtual void paint(QPainter *);
     virtual void componentComplete();
-    virtual void mousePressEvent(QGraphicsSceneMouseEvent *event);
-    virtual void mouseReleaseEvent(QGraphicsSceneMouseEvent *event);
-    virtual void mouseMoveEvent(QGraphicsSceneMouseEvent *event);
-    virtual void hoverMoveEvent(QGraphicsSceneHoverEvent *event);
+    virtual void mousePressEvent(QMouseEvent *event);
+    virtual void mouseReleaseEvent(QMouseEvent *event);
+    virtual void mouseMoveEvent(QMouseEvent *event);
+    virtual void hoverMoveEvent(QHoverEvent *event);
 
 private:
     void drawItemsToPainter(QPainter *p, int modelIndex, int fromIndex, int toIndex);