diff --git a/examples/webengine/quicknanobrowser/doc/images/quicknanobrowser-demo.jpg b/examples/webengine/quicknanobrowser/doc/images/quicknanobrowser-demo.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..12693bb0fd9323234e38e3269862412579b3be42
Binary files /dev/null and b/examples/webengine/quicknanobrowser/doc/images/quicknanobrowser-demo.jpg differ
diff --git a/examples/webengine/quicknanobrowser/doc/src/quicknanobrowser.qdoc b/examples/webengine/quicknanobrowser/doc/src/quicknanobrowser.qdoc
new file mode 100644
index 0000000000000000000000000000000000000000..e426370737a79818bdae86991b7aba5b8b289647
--- /dev/null
+++ b/examples/webengine/quicknanobrowser/doc/src/quicknanobrowser.qdoc
@@ -0,0 +1,41 @@
+/****************************************************************************
+**
+** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the documentation of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:FDL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia.  For licensing terms and
+** conditions see http://qt.digia.com/licensing.  For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** GNU Free Documentation License Usage
+** Alternatively, this file may be used under the terms of the GNU Free
+** Documentation License version 1.3 as published by the Free Software
+** Foundation and appearing in the file included in the packaging of
+** this file.  Please review the following information to ensure
+** the GNU Free Documentation License version 1.3 requirements
+** will be met: http://www.gnu.org/copyleft/fdl.html.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+/*!
+    \example quicknanobrowser
+    \title WebEngine Quick Nano Browser
+    \ingroup webengine-examples
+    \brief A web browser implemented using the WebEngineView QML type.
+
+    The Quick Nano Browser demo shows the \l{Qt WebEngine} module in action,
+    providing a little QML web browser with support for tabs and keyboard
+    shortcuts.
+
+    \image quicknanobrowser-demo.jpg
+
+    \include examples-run.qdocinc
+*/
diff --git a/examples/webenginewidgets/browser/doc/src/browser.qdoc b/examples/webenginewidgets/browser/doc/src/browser.qdoc
index a8208184d47f534378cbc5f79b49734f4ff7cdfe..f4a51518b958dcbcc81163f6bb119d22ea6cf8f5 100644
--- a/examples/webenginewidgets/browser/doc/src/browser.qdoc
+++ b/examples/webenginewidgets/browser/doc/src/browser.qdoc
@@ -1,6 +1,6 @@
 /****************************************************************************
 **
-** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
+** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
 ** Contact: http://www.qt-project.org/legal
 **
 ** This file is part of the documentation of the Qt Toolkit.
@@ -28,10 +28,13 @@
 /*!
     \example browser
     \title WebEngine Tab Browser Example
+    \ingroup webengine-widgetexamples
     \brief The QtWebKit browser example ported to use QtWebEngine
 
     The Tab Browser example shows the \l{Qt WebEngine Widgets} module in action,
     providing a little Web browser application with support for tabs.
 
     \image browser-demo.png
+
+    \include examples-run.qdocinc
 */
diff --git a/examples/webenginewidgets/fancybrowser/doc/src/fancybrowser.qdoc b/examples/webenginewidgets/fancybrowser/doc/src/fancybrowser.qdoc
index 60652c69ab31a6a8e85492c0144a6ddc91b520ab..f4b5321a120742a0136c83877470b70343a80448 100644
--- a/examples/webenginewidgets/fancybrowser/doc/src/fancybrowser.qdoc
+++ b/examples/webenginewidgets/fancybrowser/doc/src/fancybrowser.qdoc
@@ -1,6 +1,6 @@
 /****************************************************************************
 **
-** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
+** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
 ** Contact: http://www.qt-project.org/legal
 **
 ** This file is part of the documentation of the Qt Toolkit.
@@ -28,6 +28,7 @@
 /*!
     \example fancybrowser
     \title WebEngine Fancy Browser Example
+    \ingroup webengine-widgetexamples
     \brief Demonstrates how to use browse web and manipulate content
 
     \brief The Fancy Browser example shows how to use JQuery with QtWebEngine to
@@ -40,6 +41,8 @@
     evaluate the jQuery JavaScript code. A QMainWindow with a QWebEngineView
     as central widget builds up the browser itself.
 
+    \include examples-run.qdocinc
+
     \section1 MainWindow Class Definition
 
     The \c MainWindow class inherits QMainWindow. It implements a number of
diff --git a/src/3rdparty b/src/3rdparty
index 0dcd4e35086a90f643bb721fad1ef786f5fff8ba..577cd47e54bb88c81b7a5b5a6d658d8d61b2c747 160000
--- a/src/3rdparty
+++ b/src/3rdparty
@@ -1 +1 @@
-Subproject commit 0dcd4e35086a90f643bb721fad1ef786f5fff8ba
+Subproject commit 577cd47e54bb88c81b7a5b5a6d658d8d61b2c747
diff --git a/src/core/Info_mac.plist b/src/core/Info_mac.plist
new file mode 100644
index 0000000000000000000000000000000000000000..58362c810013fb9350d7b69d895d792f9c5eed0f
--- /dev/null
+++ b/src/core/Info_mac.plist
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+	<key>CFBundlePackageType</key>
+	<string>FMWK</string>
+	<key>CFBundleShortVersionString</key>
+	<string>@SHORT_VERSION@</string>
+	<key>CFBundleVersion</key>
+	<string>@FULL_VERSION@</string>
+	<key>CFBundleGetInfoString</key>
+	<string>Created by Qt/QMake</string>
+	<key>CFBundleSignature</key>
+	<string>@TYPEINFO@</string>
+	<key>CFBundleExecutable</key>
+	<string>@LIBRARY@</string>
+	<key>CFBundleIdentifier</key>
+	<string>org.qt-project.Qt.QtWebEngineCore</string>
+</dict>
+</plist>
diff --git a/src/core/access_token_store_qt.cpp b/src/core/access_token_store_qt.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..85a91c3f73f77ffd9928953d6c53a60df2f5fa50
--- /dev/null
+++ b/src/core/access_token_store_qt.cpp
@@ -0,0 +1,56 @@
+/****************************************************************************
+**
+** Copyright (C) 2014 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:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia.  For licensing terms and
+** conditions see http://qt.digia.com/licensing.  For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPLv3 included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or later as published by the Free
+** Software Foundation and appearing in the file LICENSE.GPL included in
+** the packaging of this file.  Please review the following information to
+** ensure the GNU General Public License version 2.0 requirements will be
+** met: http://www.gnu.org/licenses/gpl-2.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "access_token_store_qt.h"
+
+#include <QDebug>
+
+AccessTokenStoreQt::AccessTokenStoreQt()
+{
+}
+
+AccessTokenStoreQt::~AccessTokenStoreQt()
+{
+}
+
+void AccessTokenStoreQt::LoadAccessTokens(const LoadAccessTokensCallbackType& callback)
+{
+}
+
+void AccessTokenStoreQt::SaveAccessToken(const GURL& server_url, const base::string16& access_token)
+{
+}
+
diff --git a/src/core/access_token_store_qt.h b/src/core/access_token_store_qt.h
new file mode 100644
index 0000000000000000000000000000000000000000..2a76681f0f733c922968448d91b23abe996fd3bc
--- /dev/null
+++ b/src/core/access_token_store_qt.h
@@ -0,0 +1,57 @@
+/****************************************************************************
+**
+** Copyright (C) 2014 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:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia.  For licensing terms and
+** conditions see http://qt.digia.com/licensing.  For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPLv3 included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or later as published by the Free
+** Software Foundation and appearing in the file LICENSE.GPL included in
+** the packaging of this file.  Please review the following information to
+** ensure the GNU General Public License version 2.0 requirements will be
+** met: http://www.gnu.org/licenses/gpl-2.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef ACCESS_TOKEN_STORE_QT_H
+#define ACCESS_TOKEN_STORE_QT_H
+
+#include "content/public/browser/access_token_store.h"
+
+#include <QtCore/qcompilerdetection.h> // Needed for Q_DECL_OVERRIDE
+
+class AccessTokenStoreQt : public content::AccessTokenStore
+{
+public:
+    AccessTokenStoreQt();
+    ~AccessTokenStoreQt();
+
+    virtual void LoadAccessTokens(const LoadAccessTokensCallbackType& callback) Q_DECL_OVERRIDE;
+    virtual void SaveAccessToken(const GURL& server_url, const base::string16& access_token) Q_DECL_OVERRIDE;
+
+private:
+    DISALLOW_COPY_AND_ASSIGN(AccessTokenStoreQt);
+};
+
+#endif  // ACCESS_TOKEN_STORE_QT_H
diff --git a/src/core/config/embedded_linux.pri b/src/core/config/embedded_linux.pri
index dc6a5f612d80ce22d4f45c97bd83d9a798ab3693..4000625c68e2393e6c4ae8531930bcc4f257da31 100644
--- a/src/core/config/embedded_linux.pri
+++ b/src/core/config/embedded_linux.pri
@@ -46,6 +46,7 @@ GYP_CONFIG += \
     use_pulseaudio=0 \
     use_system_harfbuzz=0 \
     use_system_icu=1 \
+    icu_use_data_file_flag=0 \
     use_x11=0 \
     v8_use_snapshot=false \
     want_separate_host_toolset=1 \
diff --git a/src/core/content_browser_client_qt.cpp b/src/core/content_browser_client_qt.cpp
index 3ead5314f9fad23d11fd57d9c776befca93a1110..ee403298bbdad39c8aa2aef9bc7fbc71d0d5ae54 100644
--- a/src/core/content_browser_client_qt.cpp
+++ b/src/core/content_browser_client_qt.cpp
@@ -62,6 +62,7 @@
 #include "media_capture_devices_dispatcher.h"
 #include "resource_dispatcher_host_delegate_qt.h"
 #include "web_contents_delegate_qt.h"
+#include "access_token_store_qt.h"
 
 #include <QGuiApplication>
 #include <QOpenGLContext>
@@ -347,6 +348,11 @@ void ContentBrowserClientQt::OverrideWebkitPrefs(content::RenderViewHost *rvh, c
         static_cast<WebContentsDelegateQt*>(webContents->GetDelegate())->overrideWebPreferences(webContents, web_prefs);
 }
 
+content::AccessTokenStore *ContentBrowserClientQt::CreateAccessTokenStore()
+{
+    return new AccessTokenStoreQt;
+}
+
 BrowserContextQt* ContentBrowserClientQt::browser_context() {
     Q_ASSERT(m_browserMainParts);
     return static_cast<BrowserMainPartsQt*>(m_browserMainParts)->browser_context();
diff --git a/src/core/content_browser_client_qt.h b/src/core/content_browser_client_qt.h
index dd5d9f3a1cbe0bc18ce9150ac927e42087be630f..4f216030cd8e1eaa5ab37086d69c571497908454 100644
--- a/src/core/content_browser_client_qt.h
+++ b/src/core/content_browser_client_qt.h
@@ -79,6 +79,7 @@ public:
     virtual gfx::GLShareGroup* GetInProcessGpuShareGroup() Q_DECL_OVERRIDE;
     virtual content::MediaObserver* GetMediaObserver() Q_DECL_OVERRIDE;
     virtual void OverrideWebkitPrefs(content::RenderViewHost *, const GURL &, WebPreferences *) Q_DECL_OVERRIDE;
+    virtual content::AccessTokenStore *CreateAccessTokenStore() Q_DECL_OVERRIDE;
     virtual void AllowCertificateError(
         int render_process_id,
         int render_frame_id,
diff --git a/src/core/core.pro b/src/core/core.pro
index 927f8bab464c26ebc14fdd5939a5208411dcf93f..cf00f39cbd80f6d71124eeff93948012ed254aa8 100644
--- a/src/core/core.pro
+++ b/src/core/core.pro
@@ -28,30 +28,3 @@ SUBDIRS += core_gyp_generator \
     gyp_run.depends += gyp_configure_host gyp_configure_target
     SUBDIRS += gyp_configure_host gyp_configure_target
 }
-
-REPACK_DIR = $$OUT_PWD/$$getConfigDir()/gen/repack
-locales.files = "$$REPACK_DIR/qtwebengine_locales/*"
-locales.CONFIG += no_check_exist
-locales.path = $$[QT_INSTALL_TRANSLATIONS]/qtwebengine_locales
-resources.files = $$REPACK_DIR/qtwebengine_resources.pak
-resources.CONFIG += no_check_exist
-resources.path = $$[QT_INSTALL_DATA]
-
-PLUGIN_EXTENSION = .so
-PLUGIN_PREFIX = lib
-macx: PLUGIN_PREFIX =
-win32 {
-    PLUGIN_EXTENSION = .dll
-    PLUGIN_PREFIX =
-}
-
-icu.files = $$OUT_PWD/$$getConfigDir()/icudtl.dat
-icu.CONFIG += no_check_exist
-icu.path = $$[QT_INSTALL_DATA]
-
-plugins.files = $$OUT_PWD/$$getConfigDir()/$${PLUGIN_PREFIX}ffmpegsumo$${PLUGIN_EXTENSION}
-plugins.CONFIG += no_check_exist
-plugins.path = $$[QT_INSTALL_PLUGINS]/qtwebengine
-
-INSTALLS += icu locales resources plugins
-
diff --git a/src/core/core_gyp_generator.pro b/src/core/core_gyp_generator.pro
index c50d56df4af42367ef091347fd3938909fc18696..38aba3a76934bc66c7340ed8fbcaa75a38f835da 100644
--- a/src/core/core_gyp_generator.pro
+++ b/src/core/core_gyp_generator.pro
@@ -33,6 +33,7 @@ RESOURCES += devtools.qrc
 INCLUDEPATH += $$[QT_INSTALL_HEADERS] $$PWD
 
 SOURCES = \
+        access_token_store_qt.cpp \
         browser_accessibility_manager_qt.cpp \
         browser_accessibility_qt.cpp \
         browser_context_qt.cpp \
@@ -80,6 +81,7 @@ SOURCES = \
         yuv_video_node.cpp
 
 HEADERS = \
+        access_token_store_qt.h \
         browser_accessibility_manager_qt.h \
         browser_accessibility_qt.h \
         browser_context_qt.h \
diff --git a/src/core/core_module.pro b/src/core/core_module.pro
index 08e0b7822b88b6289f6a1be3983e5472fad1bbb5..66ab3ee4d81c8c6469e1c0571cd9997c4919e127 100644
--- a/src/core/core_module.pro
+++ b/src/core/core_module.pro
@@ -6,11 +6,58 @@ CMAKE_MODULE_TESTS = "-"
 QT += qml quick
 QT_PRIVATE += gui-private
 
+# Needed to set a CFBundleIdentifier
+QMAKE_INFO_PLIST = Info_mac.plist
+
 # Look for linking information produced by gyp for our target according to core_generated.gyp
 !include($$OUT_PWD/$$getConfigDir()/$${TARGET}_linking.pri) {
     error("Could not find the linking information that gyp should have generated.")
 }
 
+REPACK_DIR = $$OUT_PWD/$$getConfigDir()/gen/repack
+# Duplicated from resources/resources.gyp
+LOCALE_LIST = am ar bg bn ca cs da de el en-GB en-US es-419 es et fa fi fil fr gu he hi hr hu id it ja kn ko lt lv ml mr ms nb nl pl pt-BR pt-PT ro ru sk sl sr sv sw ta te th tr uk vi zh-CN zh-TW
+for(LOC, LOCALE_LIST) {
+    locales.files += $$REPACK_DIR/qtwebengine_locales/$${LOC}.pak
+}
+resources.files = $$REPACK_DIR/qtwebengine_resources.pak
+
+PLUGIN_EXTENSION = .so
+PLUGIN_PREFIX = lib
+osx: PLUGIN_PREFIX =
+win32 {
+    PLUGIN_EXTENSION = .dll
+    PLUGIN_PREFIX =
+}
+icu.files = $$OUT_PWD/$$getConfigDir()/icudtl.dat
+
+plugins.files = $$OUT_PWD/$$getConfigDir()/$${PLUGIN_PREFIX}ffmpegsumo$${PLUGIN_EXTENSION}
+
+!debug_and_release|!build_all|CONFIG(release, debug|release):contains(QT_CONFIG, qt_framework) {
+    locales.version = Versions
+    locales.path = Resources/qtwebengine_locales
+    resources.version = Versions
+    resources.path = Resources
+    icu.version = Versions
+    icu.path = Resources
+    plugins.version = Versions
+    plugins.path = Libraries
+    # No files, this prepares the bundle Helpers symlink, process.pro will create the directories
+    qtwebengineprocessplaceholder.version = Versions
+    qtwebengineprocessplaceholder.path = Helpers
+    QMAKE_BUNDLE_DATA += icu locales resources plugins qtwebengineprocessplaceholder
+} else {
+    locales.CONFIG += no_check_exist
+    locales.path = $$[QT_INSTALL_TRANSLATIONS]/qtwebengine_locales
+    resources.CONFIG += no_check_exist
+    resources.path = $$[QT_INSTALL_DATA]
+    icu.CONFIG += no_check_exist
+    icu.path = $$[QT_INSTALL_DATA]
+    plugins.CONFIG += no_check_exist
+    plugins.path = $$[QT_INSTALL_PLUGINS]/qtwebengine
+    INSTALLS += icu locales resources plugins
+}
+
 # We distribute the module binary but headers are only available in-tree.
 CONFIG += no_module_headers
 load(qt_module)
diff --git a/src/core/render_widget_host_view_qt.cpp b/src/core/render_widget_host_view_qt.cpp
index 2cc5510aef3958d205d8afb88bb6c71cde5d0848..c221e94e358e69b69cb042ba5641823010db3056 100644
--- a/src/core/render_widget_host_view_qt.cpp
+++ b/src/core/render_widget_host_view_qt.cpp
@@ -133,6 +133,12 @@ static inline ui::GestureProvider::Config QtGestureProviderConfig() {
     return config;
 }
 
+static inline bool compareTouchPoints(const QTouchEvent::TouchPoint &lhs, const QTouchEvent::TouchPoint &rhs)
+{
+    // TouchPointPressed < TouchPointMoved < TouchPointReleased
+    return lhs.state() < rhs.state();
+}
+
 class MotionEventQt : public ui::MotionEvent {
 public:
     MotionEventQt(const QList<QTouchEvent::TouchPoint> &touchPoints, const base::TimeTicks &eventTime, Action action, int index = -1)
@@ -983,6 +989,10 @@ void RenderWidgetHostViewQt::handleTouchEvent(QTouchEvent *ev)
     if (ev->type() == QEvent::TouchBegin)
         m_sendMotionActionDown = true;
 
+    // Make sure that ACTION_POINTER_DOWN is delivered before ACTION_MOVE,
+    // and ACTION_MOVE before ACTION_POINTER_UP.
+    std::sort(touchPoints.begin(), touchPoints.end(), compareTouchPoints);
+
     for (int i = 0; i < touchPoints.size(); ++i) {
         ui::MotionEvent::Action action;
         switch (touchPoints[i].state()) {
diff --git a/src/core/renderer/content_renderer_client_qt.h b/src/core/renderer/content_renderer_client_qt.h
index 4e3c70cf888e6e818dfce09df7c9cd41bc370c03..7103bc29b1e0fb85bf155b78d30a14ead4099576 100644
--- a/src/core/renderer/content_renderer_client_qt.h
+++ b/src/core/renderer/content_renderer_client_qt.h
@@ -33,6 +33,8 @@
 ** $QT_END_LICENSE$
 **
 ****************************************************************************/
+#ifndef CONTENT_RENDERER_CLIENT_QT_H
+#define CONTENT_RENDERER_CLIENT_QT_H
 
 #include "content/public/renderer/content_renderer_client.h"
 
@@ -61,3 +63,5 @@ public:
 private:
     QScopedPointer<visitedlink::VisitedLinkSlave> m_visitedLinkSlave;
 };
+
+#endif // CONTENT_RENDERER_CLIENT_QT_H
diff --git a/src/core/renderer/qt_render_view_observer.h b/src/core/renderer/qt_render_view_observer.h
index fed5852e45ec981303355aed4eb7cd6f88a850b9..94f8baa4032d6fabf242bbe5dcbfbc898d2c2dfd 100644
--- a/src/core/renderer/qt_render_view_observer.h
+++ b/src/core/renderer/qt_render_view_observer.h
@@ -33,6 +33,8 @@
 ** $QT_END_LICENSE$
 **
 ****************************************************************************/
+#ifndef QT_RENDER_VIEW_OBSERVER_H
+#define QT_RENDER_VIEW_OBSERVER_H
 
 #include "content/public/renderer/render_view_observer.h"
 
@@ -52,3 +54,5 @@ private:
 
     DISALLOW_COPY_AND_ASSIGN(QtRenderViewObserver);
 };
+
+#endif // QT_RENDER_VIEW_OBSERVER_H
diff --git a/src/core/web_engine_context.cpp b/src/core/web_engine_context.cpp
index 20bf3e0519a7793574656764857285c30f39acb7..ac9a921e748eec68c662085ee3aaf7da3d36644d 100644
--- a/src/core/web_engine_context.cpp
+++ b/src/core/web_engine_context.cpp
@@ -142,7 +142,11 @@ WebEngineContext::WebEngineContext()
 
 #if defined(OS_WIN)
     parsedCommandLine->AppendSwitch(switches::kDisableD3D11);
+    // ANGLE doesn't support multi-threading, doing texture upload from the GPU thread
+    // hasn't been causing problems yet but doing rendering there is conflicting with
+    // Qt's rendering of the scene graph.
     parsedCommandLine->AppendSwitch(switches::kDisableExperimentalWebGL);
+    parsedCommandLine->AppendSwitch(switches::kDisableAccelerated2dCanvas);
 #endif
 
 #if defined(QTWEBENGINE_MOBILE_SWITCHES)
diff --git a/src/core/web_engine_library_info.cpp b/src/core/web_engine_library_info.cpp
index 4cdf3813e89c6d105083f4cc35f62353523af1a3..026f4db83f62017b7fb53873fd86964f03b37d29 100644
--- a/src/core/web_engine_library_info.cpp
+++ b/src/core/web_engine_library_info.cpp
@@ -92,6 +92,39 @@ QString location(QLibraryInfo::LibraryLocation path)
     return QLibraryInfo::location(path);
 }
 
+#if defined(OS_MACOSX)
+static inline CFBundleRef frameworkBundle()
+{
+    return CFBundleGetBundleWithIdentifier(CFSTR("org.qt-project.Qt.QtWebEngineCore"));
+}
+
+static QString getPath(CFBundleRef frameworkBundle)
+{
+    QString path;
+    if (frameworkBundle) {
+        CFURLRef bundleUrl = CFBundleCopyBundleURL(frameworkBundle);
+        CFStringRef bundlePath = CFURLCopyFileSystemPath(bundleUrl, kCFURLPOSIXPathStyle);
+        path = QString::fromCFString(bundlePath);
+        CFRelease(bundlePath);
+        CFRelease(bundleUrl);
+    }
+    return path;
+}
+
+static QString getResourcesPath(CFBundleRef frameworkBundle)
+{
+    QString path;
+    if (frameworkBundle) {
+        CFURLRef resourcesRelativeUrl = CFBundleCopyResourcesDirectoryURL(frameworkBundle);
+        CFStringRef resourcesRelativePath = CFURLCopyFileSystemPath(resourcesRelativeUrl, kCFURLPOSIXPathStyle);
+        path = getPath(frameworkBundle) % QLatin1Char('/') % QString::fromCFString(resourcesRelativePath);
+        CFRelease(resourcesRelativePath);
+        CFRelease(resourcesRelativeUrl);
+    }
+    return path;
+}
+#endif
+
 QString subProcessPath()
 {
     static bool initialized = false;
@@ -100,14 +133,19 @@ QString subProcessPath()
 #else
     static QString processBinary (QLatin1String(QTWEBENGINEPROCESS_NAME));
 #endif
+#if defined(OS_MACOSX) && defined(QT_MAC_FRAMEWORK_BUILD)
+    static QString processPath (getPath(frameworkBundle())
+                                % QStringLiteral("/Helpers/" QTWEBENGINEPROCESS_NAME ".app/Contents/MacOS/" QTWEBENGINEPROCESS_NAME));
+#else
     static QString processPath (location(QLibraryInfo::LibraryExecutablesPath)
                                 % QDir::separator() % processBinary);
+#endif
     if (!initialized) {
         // Allow overriding at runtime for the time being.
         const QByteArray fromEnv = qgetenv("QTWEBENGINEPROCESS_PATH");
         if (!fromEnv.isEmpty())
             processPath = QString::fromLatin1(fromEnv);
-        if (processPath.isEmpty() || !QFileInfo(processPath).exists()) {
+        if (!QFileInfo(processPath).exists()) {
             qWarning("QtWebEngineProcess not found at location %s. Trying fallback path...", qPrintable(processPath));
             processPath = QCoreApplication::applicationDirPath() % QDir::separator() % processBinary;
         }
@@ -121,12 +159,20 @@ QString subProcessPath()
 
 QString pluginsPath()
 {
+#if defined(OS_MACOSX) && defined(QT_MAC_FRAMEWORK_BUILD)
+    return getPath(frameworkBundle()) % QLatin1String("/Libraries");
+#else
     return location(QLibraryInfo::PluginsPath) % QDir::separator() % QLatin1String("qtwebengine");
+#endif
 }
 
 QString localesPath()
 {
+#if defined(OS_MACOSX) && defined(QT_MAC_FRAMEWORK_BUILD)
+    return getResourcesPath(frameworkBundle()) % QLatin1String("/qtwebengine_locales");
+#else
     return location(QLibraryInfo::TranslationsPath) % QLatin1String("/qtwebengine_locales");
+#endif
 }
 
 QString fallbackDir() {
@@ -155,7 +201,11 @@ base::FilePath WebEngineLibraryInfo::getPath(int key)
     QString directory;
     switch (key) {
     case QT_RESOURCES_PAK:
+#if defined(OS_MACOSX) && defined(QT_MAC_FRAMEWORK_BUILD)
+        return toFilePath(getResourcesPath(frameworkBundle()) % QLatin1String("/qtwebengine_resources.pak"));
+#else
         return toFilePath(location(QLibraryInfo::DataPath) % QLatin1String("/qtwebengine_resources.pak"));
+#endif
     case base::FILE_EXE:
     case content::CHILD_PROCESS_EXE:
         return toFilePath(subProcessPath());
@@ -171,7 +221,11 @@ base::FilePath WebEngineLibraryInfo::getPath(int key)
         directory = QStandardPaths::writableLocation(QStandardPaths::DesktopLocation);
         break;
     case base::DIR_QT_LIBRARY_DATA:
+#if defined(OS_MACOSX) && defined(QT_MAC_FRAMEWORK_BUILD)
+        return toFilePath(getResourcesPath(frameworkBundle()));
+#else
         return toFilePath(location(QLibraryInfo::DataPath));
+#endif
 #if defined(OS_ANDROID)
     case base::DIR_SOURCE_ROOT:
     case base::DIR_ANDROID_EXTERNAL_STORAGE:
diff --git a/src/process/process.pro b/src/process/process.pro
index a9f5d183f1c99ad71be337232deba247e5e18d2a..ad1575c81f253d432a9f7163dba3cdf0706fe24a 100644
--- a/src/process/process.pro
+++ b/src/process/process.pro
@@ -1,16 +1,42 @@
 TARGET = $$QTWEBENGINEPROCESS_NAME
 TEMPLATE = app
 
-QT_PRIVATE += webenginecore
+load(qt_build_paths)
+contains(QT_CONFIG, qt_framework) {
+    # Deploy the QtWebEngineProcess app bundle into the QtWebEngineCore framework.
+    DESTDIR = $$MODULE_BASE_OUTDIR/lib/QtWebEngineCore.framework/Versions/5/Helpers
 
-CONFIG -= app_bundle
+    # FIXME: We can remove those steps in Qt 5.5 once @rpath works
+    # "QT += webenginecore" would pull all dependencies that we'd also need to update
+    # with install_name_tool on OSX, but we only need access to the private
+    # QtWebEngine::processMain. qtAddModule will take care of finding where
+    # the library is without pulling additional librarie.
+    QT = core
+    qtAddModule(webenginecore, LIBS)
+    CONFIG -= link_prl
+    QMAKE_POST_LINK = \
+        "xcrun install_name_tool -change " \
+        "`xcrun otool -X -L $(TARGET) | grep QtWebEngineCore | cut -d ' ' -f 1` " \
+        "@executable_path/../../../../QtWebEngineCore " \
+        "$(TARGET); " \
+        "xcrun install_name_tool -change " \
+        "`xcrun otool -X -L $(TARGET) | grep QtCore | cut -d ' ' -f 1` " \
+        "@executable_path/../../../../../../../QtCore.framework/QtCore " \
+        "$(TARGET) "
+} else {
+    CONFIG -= app_bundle
+    DESTDIR = $$MODULE_BASE_OUTDIR/libexec
 
-load(qt_build_paths)
-DESTDIR = $$MODULE_BASE_OUTDIR/libexec
+    QT_PRIVATE += webenginecore
+}
 
 INCLUDEPATH += ../core
 
 SOURCES = main.cpp
 
-target.path = $$[QT_INSTALL_LIBEXECS]
+contains(QT_CONFIG, qt_framework) {
+    target.path = $$[QT_INSTALL_LIBS]/QtWebEngineCore.framework/Versions/5/Helpers
+} else {
+    target.path = $$[QT_INSTALL_LIBEXECS]
+}
 INSTALLS += target
diff --git a/src/webengine/api/qquickwebenginesettings.cpp b/src/webengine/api/qquickwebenginesettings.cpp
index 7f36bad5e0fbac6ee0037a71fccb63140acf2cf9..743d22d815d1894d700909c070ccc78c7099bf69 100644
--- a/src/webengine/api/qquickwebenginesettings.cpp
+++ b/src/webengine/api/qquickwebenginesettings.cpp
@@ -78,6 +78,7 @@ QQuickWebEngineSettings *QQuickWebEngineSettings::globalSettings()
 
 QQuickWebEngineSettings::~QQuickWebEngineSettings()
 {
+    allSettings->removeAll(this->d_func());
 }
 
 bool QQuickWebEngineSettings::autoLoadImages() const
diff --git a/src/webenginewidgets/doc/src/qtwebenginewidgets.qdoc b/src/webenginewidgets/doc/src/qtwebenginewidgets.qdoc
index 3f6e888f35b22046c469505205cf1f34fa62d072..d440dd06ad6777909fa1f60119ed817486b0abfc 100644
--- a/src/webenginewidgets/doc/src/qtwebenginewidgets.qdoc
+++ b/src/webenginewidgets/doc/src/qtwebenginewidgets.qdoc
@@ -117,6 +117,12 @@
         \li \l {Qt WebEngine Widgets C++ Classes}
     \endlist
 
+    \section1 Examples
+
+    \list
+        \li \l {Qt WebEngine Widgets Examples}
+    \endlist
+
     \section1 License Information
     This is a snapshot of the integration of Chromium into Qt.
 
diff --git a/tests/auto/quick/qmltests/data/tst_loadFail.qml b/tests/auto/quick/qmltests/data/tst_loadFail.qml
index 7b0a1849e357afe1a7b22e635240aa2b7f9842a0..694547863b3c9668d3987014ea5af3b7c0e1b130 100644
--- a/tests/auto/quick/qmltests/data/tst_loadFail.qml
+++ b/tests/auto/quick/qmltests/data/tst_loadFail.qml
@@ -42,38 +42,49 @@
 import QtQuick 2.0
 import QtTest 1.0
 import QtWebEngine 1.0
+import QtWebEngine.experimental 1.0
 
 TestWebEngineView {
     id: webEngineView
     width: 400
     height: 300
 
-    property variant testUrl
-
-    SignalSpy {
-        id: spyIconChanged
-        target: webEngineView
-        signalName: "iconChanged"
-    }
+    property variant unavailableUrl
 
     TestCase {
         id: test
         name: "WebEngineViewLoadFail"
+
+        function initTestCase() {
+            WebEngine.settings.errorPageEnabled = false
+        }
+
         function test_fail() {
-            testUrl = Qt.resolvedUrl("file_that_does_not_exist.html")
-            webEngineView.url = testUrl
+            unavailableUrl = Qt.resolvedUrl("file_that_does_not_exist.html")
+            webEngineView.url = unavailableUrl
             verify(webEngineView.waitForLoadFailed())
-            spyIconChanged.clear()
+        }
 
-            // If this testcase finishes too early, we can not handle the received replacement content.
-            // So we should wait to ignore this error page.
-            spyIconChanged.wait()
+        function test_fail_url() {
+            var url = Qt.resolvedUrl("test1.html")
+            webEngineView.url = url
+            compare(webEngineView.url, url)
+            verify(webEngineView.waitForLoadSucceeded())
+            compare(webEngineView.url, url)
+
+            unavailableUrl = Qt.resolvedUrl("file_that_does_not_exist.html")
+            webEngineView.url = unavailableUrl
+            compare(webEngineView.url, unavailableUrl)
+            verify(webEngineView.waitForLoadFailed())
+            // When error page is disabled in case of LoadFail the entry of the unavailable page is not stored.
+            // We expect the url of the previously loaded page here.
+            compare(webEngineView.url, url)
         }
     }
 
     onLoadingChanged: {
         if (loadRequest.status == WebEngineView.LoadFailedStatus) {
-            test.compare(loadRequest.url, testUrl)
+            test.compare(loadRequest.url, unavailableUrl)
             test.compare(loadRequest.errorDomain, WebEngineView.InternalErrorDomain)
         }
     }
diff --git a/tests/auto/quick/qmltests/data/tst_loadUrl.qml b/tests/auto/quick/qmltests/data/tst_loadUrl.qml
index 5f51e90364a58a9e33d6df94c649a0baef9baf51..e0e185eb0310bc84cc999868d1561e02a045d441 100644
--- a/tests/auto/quick/qmltests/data/tst_loadUrl.qml
+++ b/tests/auto/quick/qmltests/data/tst_loadUrl.qml
@@ -42,6 +42,7 @@
 import QtQuick 2.0
 import QtTest 1.0
 import QtWebEngine 1.0
+import QtWebEngine.experimental 1.0
 
 TestWebEngineView {
     id: webEngineView
@@ -106,6 +107,8 @@ TestWebEngineView {
         }
 
         function test_urlProperty() {
+            WebEngine.settings.errorPageEnabled = false
+
             var url = Qt.resolvedUrl("test1.html")
 
             webEngineView.url = url
@@ -117,7 +120,7 @@ TestWebEngineView {
             webEngineView.url = bogusSite
             compare(webEngineView.url, bogusSite)
             verify(webEngineView.waitForLoadFailed())
-            compare(webEngineView.url, bogusSite)
+            compare(webEngineView.url, url)
 
             webEngineView.url = "about:blank" // Reset from previous test
             verify(webEngineView.waitForLoadSucceeded())