diff --git a/examples/webengine/quicknanobrowser/BrowserWindow.qml b/examples/webengine/quicknanobrowser/BrowserWindow.qml
index 0b87727918ccbec53475515606cc4f4036d27d38..df13f99b9f6c68042e5823522f258f6d3e03f6ef 100644
--- a/examples/webengine/quicknanobrowser/BrowserWindow.qml
+++ b/examples/webengine/quicknanobrowser/BrowserWindow.qml
@@ -46,6 +46,7 @@ import QtQuick.Layouts 1.0
 import QtQuick.Window 2.1
 import QtQuick.Controls.Private 1.0
 import QtQuick.Dialogs 1.2
+import Qt.labs.settings 1.0
 
 ApplicationWindow {
     id: browserWindow
@@ -62,6 +63,34 @@ ApplicationWindow {
     StyleItem { id: styleItem }
     property bool platformIsMac: styleItem.style == "mac"
 
+    Settings {
+        property alias autoLoadImages: loadImages.checked;
+        property alias javaScriptEnabled: javaScriptEnabled.checked;
+        property alias errorPageEnabled: errorPageEnabled.checked;
+    }
+
+    WebEngineProfile {
+        id: defaultProfile
+        storageName: "Default"
+        httpCacheType: httpDiskCacheEnabled.checked ? WebEngineProfile.DiskHttpCache : WebEngineProfile.MemoryHttpCache;
+        onDownloadRequested: {
+            downloadView.visible = true
+            downloadView.append(download)
+            download.accept()
+        }
+    }
+
+    WebEngineProfile {
+        id: otrProfile
+        offTheRecord: true
+    }
+
+    Action {
+        shortcut: "Ctrl+D"
+        onTriggered: {
+            downloadView.visible = !downloadView.visible
+        }
+    }
     Action {
         id: focus
         shortcut: "Ctrl+L"
@@ -151,6 +180,44 @@ ApplicationWindow {
                     text: currentWebView && currentWebView.url
                     onAccepted: currentWebView.url = utils.fromUserInput(text)
                 }
+                ToolButton {
+                    id: settingsMenuButton
+                    menu: Menu {
+                        MenuItem {
+                            id: loadImages
+                            text: "Autoload images"
+                            checkable: true
+                            checked: WebEngine.settings.autoLoadImages
+                            onCheckedChanged: WebEngine.settings.autoLoadImages = checked
+                        }
+                        MenuItem {
+                            id: javaScriptEnabled
+                            text: "JavaScript On"
+                            checkable: true
+                            checked: WebEngine.settings.javascriptEnabled
+                            onCheckedChanged: WebEngine.settings.javascriptEnabled = checked
+                        }
+                        MenuItem {
+                            id: errorPageEnabled
+                            text: "ErrorPage On"
+                            checkable: true
+                            checked: WebEngine.settings.errorPageEnabled
+                            onCheckedChanged: WebEngine.settings.errorPageEnabled = checked
+                        }
+                        MenuItem {
+                            id: offTheRecordEnabled
+                            text: "Off The Record"
+                            checkable: true
+                            checked: false
+                        }
+                        MenuItem {
+                            id: httpDiskCacheEnabled
+                            text: "HTTP Disk Cache"
+                            checkable: true
+                            checked: (defaultProfile.httpCacheType == WebEngineProfile.DiskHttpCache)
+                        }
+                    }
+                }
             }
             ProgressBar {
                 id: progressBar
@@ -190,6 +257,7 @@ ApplicationWindow {
             WebEngineView {
                 id: webEngineView
                 focus: true
+                profile: offTheRecordEnabled.checked ? otrProfile : defaultProfile
 
                 onLinkHovered: {
                     if (hoveredUrl == "")
@@ -236,6 +304,11 @@ ApplicationWindow {
         onAccepted: certError.ignoreCertificateError()
         onRejected: certError.rejectCertificate()
     }
+    DownloadView {
+        id: downloadView
+        visible: false
+        anchors.fill: parent
+    }
     Rectangle {
         id: statusBubble
         color: "oldlace"
diff --git a/examples/webengine/quicknanobrowser/DownloadView.qml b/examples/webengine/quicknanobrowser/DownloadView.qml
new file mode 100644
index 0000000000000000000000000000000000000000..763c02cd45e631bea3340e0cfabea1fdbf36732a
--- /dev/null
+++ b/examples/webengine/quicknanobrowser/DownloadView.qml
@@ -0,0 +1,165 @@
+/****************************************************************************
+**
+** Copyright (C) 2015 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the QtWebEngine module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+**   * Redistributions of source code must retain the above copyright
+**     notice, this list of conditions and the following disclaimer.
+**   * Redistributions in binary form must reproduce the above copyright
+**     notice, this list of conditions and the following disclaimer in
+**     the documentation and/or other materials provided with the
+**     distribution.
+**   * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
+**     of its contributors may be used to endorse or promote products derived
+**     from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.1
+import QtQuick.Controls 1.0
+import QtQuick.Controls.Styles 1.0
+import QtWebEngine 1.0
+import QtQuick.Layouts 1.0
+
+Rectangle {
+    id: downloadView
+    color: "lightgray"
+
+    ListModel {
+        id: downloadModel
+        property var downloads: []
+    }
+
+    function append(download) {
+        downloadModel.append(download)
+        downloadModel.downloads.push(download)
+    }
+
+    Component {
+        id: downloadItemDelegate
+
+        Rectangle {
+            width: listView.width
+            height: childrenRect.height
+            anchors.margins: 10
+            radius: 3
+            color: "transparent"
+            border.color: "black"
+            Rectangle {
+                id: progressBar
+
+                property real progress: downloadModel.downloads[index]
+                                       ? downloadModel.downloads[index].receivedBytes / downloadModel.downloads[index].totalBytes : 0
+
+                radius: 3
+                color: width == listView.width ? "green" : "#2b74c7"
+                width: listView.width * progress
+                height: cancelButton.height
+
+                Behavior on width {
+                    SmoothedAnimation { duration: 100 }
+                }
+            }
+            Rectangle {
+                anchors {
+                    left: parent.left
+                    right: parent.right
+                    leftMargin: 20
+                }
+                Label {
+                    id: label
+                    text: path
+                    anchors {
+                        verticalCenter: cancelButton.verticalCenter
+                        left: parent.left
+                        right: cancelButton.left
+                    }
+                }
+                Button {
+                    id: cancelButton
+                    anchors.right: parent.right
+                    iconSource: "icons/process-stop.png"
+                    onClicked: {
+                        var download = downloadModel.downloads[index]
+
+                        download.cancel()
+
+                        downloadModel.downloads = downloadModel.downloads.filter(function (el) {
+                            return el.id !== download.id;
+                        });
+                        downloadModel.remove(index)
+                    }
+                }
+            }
+        }
+
+    }
+    ListView {
+        id: listView
+        anchors {
+            topMargin: 10
+            top: parent.top
+            bottom: parent.bottom
+            horizontalCenter: parent.horizontalCenter
+        }
+        width: parent.width - 20
+        spacing: 5
+
+        model: downloadModel
+        delegate: downloadItemDelegate
+
+        Text {
+            visible: !listView.count
+            horizontalAlignment: Text.AlignHCenter
+            height: 30
+            anchors {
+                top: parent.top
+                left: parent.left
+                right: parent.right
+            }
+            font.pixelSize: 20
+            text: "No active downloads."
+        }
+
+        Rectangle {
+            color: "gray"
+            anchors {
+                bottom: parent.bottom
+                left: parent.left
+                right: parent.right
+            }
+            height: 30
+            Button {
+                id: okButton
+                text: "OK"
+                anchors.centerIn: parent
+                onClicked: {
+                    downloadView.visible = false
+                }
+            }
+        }
+    }
+}
diff --git a/examples/webengine/quicknanobrowser/quicknanobrowser.pro b/examples/webengine/quicknanobrowser/quicknanobrowser.pro
index b6bc2e0db17418d2ef5758b2fe54ce288e570913..1447af92777ebbc6f10463e5355ece59470b5300 100644
--- a/examples/webengine/quicknanobrowser/quicknanobrowser.pro
+++ b/examples/webengine/quicknanobrowser/quicknanobrowser.pro
@@ -8,7 +8,8 @@ SOURCES = main.cpp
 
 OTHER_FILES += ApplicationRoot.qml \
                BrowserDialog.qml \
-               BrowserWindow.qml
+               BrowserWindow.qml \
+               DownloadView.qml
 
 RESOURCES += resources.qrc
 
diff --git a/examples/webengine/quicknanobrowser/resources.qrc b/examples/webengine/quicknanobrowser/resources.qrc
index 2c1aea802b43450475d651c723884eded0cb00b9..28fd7b7dc2d9afc7ceee7e223906514750e9bb0c 100644
--- a/examples/webengine/quicknanobrowser/resources.qrc
+++ b/examples/webengine/quicknanobrowser/resources.qrc
@@ -3,6 +3,7 @@
         <file>ApplicationRoot.qml</file>
         <file>BrowserDialog.qml</file>
         <file>BrowserWindow.qml</file>
+        <file>DownloadView.qml</file>
     </qresource>
     <qresource prefix="icons">
         <file alias="go-next.png">icons/go-next.png</file>
diff --git a/src/webengine/plugin/experimental/plugin.cpp b/src/webengine/plugin/experimental/plugin.cpp
index cd38f744cee003c30df0103e2ed62d841ad4e0c2..4d00a4d3dd6ab5c1ddedc189c88d5fc0279f5f14 100644
--- a/src/webengine/plugin/experimental/plugin.cpp
+++ b/src/webengine/plugin/experimental/plugin.cpp
@@ -36,19 +36,12 @@
 
 #include <QtQml/qqmlextensionplugin.h>
 
-#include "qquickwebenginedownloaditem_p.h"
 #include "qquickwebenginehistory_p.h"
-#include "qquickwebenginesingleton_p.h"
 #include "qquickwebengineview_p.h"
 #include "qquickwebengineview_p_p.h"
 
 QT_BEGIN_NAMESPACE
 
-static QObject *webEngineSingletonProvider(QQmlEngine *, QJSEngine *)
-{
-    return new QQuickWebEngineSingleton;
-}
-
 class QQuickWebEngineViewExperimentalExtension : public QObject {
     Q_OBJECT
     Q_PROPERTY(QQuickWebEngineViewExperimental* experimental READ experimental CONSTANT FINAL)
@@ -78,9 +71,6 @@ public:
             QObject::tr("Cannot create a separate instance of NavigationHistory"));
         qmlRegisterUncreatableType<QQuickWebEngineHistoryListModel>(uri, 1, 0, "NavigationHistoryListModel",
             QObject::tr("Cannot create a separate instance of NavigationHistory"));
-        qmlRegisterUncreatableType<QQuickWebEngineDownloadItem>(uri, 1, 0, "WebEngineDownloadItem",
-            QObject::tr("Cannot create a separate instance of WebEngineDownloadItem"));
-        qmlRegisterSingletonType<QQuickWebEngineSingleton>(uri, 1, 0, "WebEngine", webEngineSingletonProvider);
 
         // Use the latest revision of QQuickWebEngineView when importing QtWebEngine.experimental 1.0
         qmlRegisterRevision<QQuickWebEngineView, 1>(uri, 1, 0);
diff --git a/src/webengine/plugin/plugin.cpp b/src/webengine/plugin/plugin.cpp
index 1a74741327000e8afe0cf1736ee961fd82bca562..b6ac8407c6119694dbee413f5a46548d16c11882 100644
--- a/src/webengine/plugin/plugin.cpp
+++ b/src/webengine/plugin/plugin.cpp
@@ -37,19 +37,22 @@
 #include <QtQml/qqmlextensionplugin.h>
 
 #include "qquickwebenginecertificateerror_p.h"
+#include "qquickwebenginedownloaditem_p.h"
 #include "qquickwebengineloadrequest_p.h"
 #include "qquickwebenginenavigationrequest_p.h"
 #include "qquickwebenginenewviewrequest_p.h"
 #include "qquickwebengineprofile_p.h"
 #include "qquickwebenginesettings_p.h"
+#include "qquickwebenginesingleton_p.h"
 #include "qquickwebengineview_p.h"
 #include "qtwebengineversion.h"
 
 QT_BEGIN_NAMESPACE
 
-class QQuickWebEngineVersionBumper : public QObject {
-    Q_OBJECT
-};
+static QObject *webEngineSingletonProvider(QQmlEngine *, QJSEngine *)
+{
+    return new QQuickWebEngineSingleton;
+}
 
 class QtWebEnginePlugin : public QQmlExtensionPlugin
 {
@@ -67,8 +70,11 @@ public:
         qmlRegisterType<QQuickWebEngineView, 1>(uri, 1, 1, "WebEngineView");
         qmlRegisterType<QQuickWebEngineProfile>(uri, 1, 1, "WebEngineProfile");
         qmlRegisterUncreatableType<QQuickWebEngineCertificateError>(uri, 1, 1, "WebEngineCertificateError", QObject::tr("Cannot create separate instance of WebEngineCertificateError"));
+        qmlRegisterUncreatableType<QQuickWebEngineDownloadItem>(uri, 1, 1, "WebEngineDownloadItem",
+            QObject::tr("Cannot create a separate instance of WebEngineDownloadItem"));
         qmlRegisterUncreatableType<QQuickWebEngineNewViewRequest>(uri, 1, 1, "WebEngineNewViewRequest", QObject::tr("Cannot create separate instance of WebEngineNewViewRequest"));
         qmlRegisterUncreatableType<QQuickWebEngineSettings>(uri, 1, 1, "WebEngineSettings", QObject::tr("Cannot create a separate instance of WebEngineSettings"));
+        qmlRegisterSingletonType<QQuickWebEngineSingleton>(uri, 1, 1, "WebEngine", webEngineSingletonProvider);
     }
 };