diff --git a/src/core/api/qwebengineurlrequestjob.h b/src/core/api/qwebengineurlrequestjob.h
index 098d46c93c52d80aab1d8e96eb0673bd31380874..76e9b2c390a19f5a278617ad8ac6043d4665fb2d 100644
--- a/src/core/api/qwebengineurlrequestjob.h
+++ b/src/core/api/qwebengineurlrequestjob.h
@@ -55,6 +55,7 @@
 #include <QtCore/qurl.h>
 
 namespace QtWebEngineCore {
+class URLRequestCustomJob;
 class URLRequestCustomJobDelegate;
 } // namespace
 
@@ -86,7 +87,7 @@ public:
 
 private:
     QWebEngineUrlRequestJob(QtWebEngineCore::URLRequestCustomJobDelegate *);
-    friend class QWebEngineUrlSchemeHandlerPrivate;
+    friend class QtWebEngineCore::URLRequestCustomJob;
 
     QtWebEngineCore::URLRequestCustomJobDelegate* d_ptr;
 };
diff --git a/src/core/api/qwebengineurlschemehandler.cpp b/src/core/api/qwebengineurlschemehandler.cpp
index e14da6fb5cc9ad175f67742af76e0bfd20c7b81f..b2994847bc38024f5d237b33de3558a308413881 100644
--- a/src/core/api/qwebengineurlschemehandler.cpp
+++ b/src/core/api/qwebengineurlschemehandler.cpp
@@ -53,23 +53,11 @@ QT_BEGIN_NAMESPACE
 
 */
 
-QWebEngineUrlSchemeHandlerPrivate::QWebEngineUrlSchemeHandlerPrivate(const QByteArray &scheme, QWebEngineUrlSchemeHandler *q)
-    : CustomUrlSchemeHandler(scheme)
-    , q_ptr(q)
+QWebEngineUrlSchemeHandlerPrivate::QWebEngineUrlSchemeHandlerPrivate(const QByteArray &scheme)
+    : m_scheme(scheme)
 {
 }
 
-QWebEngineUrlSchemeHandlerPrivate::~QWebEngineUrlSchemeHandlerPrivate()
-{
-}
-
-bool QWebEngineUrlSchemeHandlerPrivate::handleJob(QtWebEngineCore::URLRequestCustomJobDelegate *job)
-{
-    QWebEngineUrlRequestJob *requestJob = new QWebEngineUrlRequestJob(job);
-    q_ptr->requestStarted(requestJob);
-    return true;
-}
-
 /*!
     Constructs a new URL scheme handler.
 
@@ -78,7 +66,7 @@ bool QWebEngineUrlSchemeHandlerPrivate::handleJob(QtWebEngineCore::URLRequestCus
   */
 QWebEngineUrlSchemeHandler::QWebEngineUrlSchemeHandler(const QByteArray &scheme, QObject *parent)
     : QObject(parent)
-    , d_ptr(new QWebEngineUrlSchemeHandlerPrivate(scheme, this))
+    , d_ptr(new QWebEngineUrlSchemeHandlerPrivate(scheme))
 {
 }
 
diff --git a/src/core/api/qwebengineurlschemehandler.h b/src/core/api/qwebengineurlschemehandler.h
index 1ec32e46c9de83182d0974aac876aae34243eed7..1b6a66706513f15a75f10dc55e4973ae17e0de3e 100644
--- a/src/core/api/qwebengineurlschemehandler.h
+++ b/src/core/api/qwebengineurlschemehandler.h
@@ -42,6 +42,10 @@
 #include <QtCore/qbytearray.h>
 #include <QtCore/qobject.h>
 
+namespace QtWebEngineCore {
+class URLRequestContextGetterQt;
+}
+
 QT_BEGIN_NAMESPACE
 
 class QWebEngineUrlRequestJob;
@@ -63,8 +67,6 @@ Q_SIGNALS:
 private:
     Q_DISABLE_COPY(QWebEngineUrlSchemeHandler)
     Q_DECLARE_PRIVATE(QWebEngineUrlSchemeHandler)
-    friend class QWebEngineProfile;
-    friend class QQuickWebEngineProfile;
     QWebEngineUrlSchemeHandlerPrivate *d_ptr;
 };
 
diff --git a/src/core/api/qwebengineurlschemehandler_p.h b/src/core/api/qwebengineurlschemehandler_p.h
index dc4b272b328895ae9c18e78ca7c9b0b5c96c81b9..d63666326d4a493df4882e798dac6ca6f8e3277a 100644
--- a/src/core/api/qwebengineurlschemehandler_p.h
+++ b/src/core/api/qwebengineurlschemehandler_p.h
@@ -48,27 +48,18 @@
 // We mean it.
 //
 
-#include "qwebengineurlschemehandler.h"
-
-#include "custom_url_scheme_handler.h"
+#include <QtCore/qbytearray.h>
 
 QT_BEGIN_NAMESPACE
 
-class QWebEngineProfile;
-class QWebEngineUrlRequestJob;
-class QWebEngineUrlSchemeHandler;
-
-class QWEBENGINE_EXPORT QWebEngineUrlSchemeHandlerPrivate : public QtWebEngineCore::CustomUrlSchemeHandler {
+class QWEBENGINE_EXPORT QWebEngineUrlSchemeHandlerPrivate {
 public:
-    Q_DECLARE_PUBLIC(QWebEngineUrlSchemeHandler)
-
-    QWebEngineUrlSchemeHandlerPrivate(const QByteArray &, QWebEngineUrlSchemeHandler *);
-    virtual ~QWebEngineUrlSchemeHandlerPrivate();
+    QWebEngineUrlSchemeHandlerPrivate(const QByteArray &);
 
-    virtual bool handleJob(QtWebEngineCore::URLRequestCustomJobDelegate*) Q_DECL_OVERRIDE;
+    const QByteArray &scheme() const { return m_scheme; }
 
 private:
-    QWebEngineUrlSchemeHandler *q_ptr;
+    QByteArray m_scheme;
 };
 
 QT_END_NAMESPACE
diff --git a/src/core/browser_context_adapter.cpp b/src/core/browser_context_adapter.cpp
index 02fa207c9b48d7961ad1583b3f383b50b280adc3..3457418475fa0854988890cd2dbedbfd2b92f0aa 100644
--- a/src/core/browser_context_adapter.cpp
+++ b/src/core/browser_context_adapter.cpp
@@ -354,7 +354,7 @@ void BrowserContextAdapter::setHttpCacheMaxSize(int maxSize)
         m_browserContext->url_request_getter_->updateHttpCache();
 }
 
-QVector<CustomUrlSchemeHandler*> &BrowserContextAdapter::customUrlSchemeHandlers()
+QHash<QByteArray, QWebEngineUrlSchemeHandler *> &BrowserContextAdapter::customUrlSchemeHandlers()
 {
     return m_customUrlSchemeHandlers;
 }
@@ -365,10 +365,9 @@ void BrowserContextAdapter::updateCustomUrlSchemeHandlers()
         m_browserContext->url_request_getter_->updateStorageSettings();
 }
 
-void BrowserContextAdapter::removeCustomUrlSchemeHandler(CustomUrlSchemeHandler *handler)
+void BrowserContextAdapter::removeCustomUrlSchemeHandler(QWebEngineUrlSchemeHandler *handler)
 {
-    m_customUrlSchemeHandlers.removeOne(handler);
-    Q_ASSERT(!m_customUrlSchemeHandlers.contains(handler));
+    m_customUrlSchemeHandlers.remove(handler->scheme());
 }
 
 UserScriptControllerHost *BrowserContextAdapter::userScriptController()
diff --git a/src/core/browser_context_adapter.h b/src/core/browser_context_adapter.h
index 0bca1bf8b0b40ed1bd2de577cdb852570b7b6877..5272268f7e9d427a039d817120750db155f9c858 100644
--- a/src/core/browser_context_adapter.h
+++ b/src/core/browser_context_adapter.h
@@ -48,6 +48,7 @@
 
 #include "api/qwebenginecookiestoreclient.h"
 #include "api/qwebengineurlrequestinterceptor.h"
+#include "api/qwebengineurlschemehandler.h"
 
 QT_FORWARD_DECLARE_CLASS(QObject)
 
@@ -55,7 +56,6 @@ namespace QtWebEngineCore {
 
 class BrowserContextAdapterClient;
 class BrowserContextQt;
-class CustomUrlSchemeHandler;
 class DownloadManagerDelegateQt;
 class UserScriptControllerHost;
 class WebEngineVisitedLinksManager;
@@ -145,9 +145,9 @@ public:
     bool trackVisitedLinks() const;
     bool persistVisitedLinks() const;
 
-    QVector<CustomUrlSchemeHandler*> &customUrlSchemeHandlers();
+    QHash<QByteArray, QWebEngineUrlSchemeHandler *> &customUrlSchemeHandlers();
     void updateCustomUrlSchemeHandlers();
-    void removeCustomUrlSchemeHandler(CustomUrlSchemeHandler*);
+    void removeCustomUrlSchemeHandler(QWebEngineUrlSchemeHandler *);
     UserScriptControllerHost *userScriptController();
 
     void permissionRequestReply(const QUrl &origin, PermissionType type, bool reply);
@@ -173,7 +173,7 @@ private:
     QString m_httpAcceptLanguage;
     PersistentCookiesPolicy m_persistentCookiesPolicy;
     VisitedLinksPolicy m_visitedLinksPolicy;
-    QVector<CustomUrlSchemeHandler*> m_customUrlSchemeHandlers;
+    QHash<QByteArray, QWebEngineUrlSchemeHandler *> m_customUrlSchemeHandlers;
     QList<BrowserContextAdapterClient*> m_clients;
     int m_httpCacheMaxSize;
 
diff --git a/src/core/core_gyp_generator.pro b/src/core/core_gyp_generator.pro
index c1b8179e0b94d3d6fd88cec75ce4d7be88dc7025..813626dc3dca6588c53b32c0306a8ae514562d1b 100644
--- a/src/core/core_gyp_generator.pro
+++ b/src/core/core_gyp_generator.pro
@@ -45,7 +45,6 @@ SOURCES = \
         content_main_delegate_qt.cpp \
         cookie_monster_delegate_qt.cpp \
         custom_protocol_handler.cpp \
-        custom_url_scheme_handler.cpp \
         delegated_frame_node.cpp \
         desktop_screen_qt.cpp \
         dev_tools_http_handler_delegate_qt.cpp \
@@ -117,7 +116,6 @@ HEADERS = \
         content_main_delegate_qt.h \
         cookie_monster_delegate_qt.h \
         custom_protocol_handler.h \
-        custom_url_scheme_handler.h \
         delegated_frame_node.h \
         desktop_screen_qt.h \
         dev_tools_http_handler_delegate_qt.h \
diff --git a/src/core/custom_protocol_handler.cpp b/src/core/custom_protocol_handler.cpp
index f140f98cf141980ae5804aae939aaf434e6a7edb..fd1a4de41a539fb8ea35f8f136d3d28f8a733cd9 100644
--- a/src/core/custom_protocol_handler.cpp
+++ b/src/core/custom_protocol_handler.cpp
@@ -43,7 +43,7 @@
 
 namespace QtWebEngineCore {
 
-CustomProtocolHandler::CustomProtocolHandler(CustomUrlSchemeHandler *schemeHandler)
+CustomProtocolHandler::CustomProtocolHandler(QWebEngineUrlSchemeHandler *schemeHandler)
     : m_schemeHandler(schemeHandler)
 {
 }
diff --git a/src/core/custom_protocol_handler.h b/src/core/custom_protocol_handler.h
index 225bb0567cca18f04c709e21d9675fb7843a6aab..94da286736d237f6216d586d53cb7ca756b03dc0 100644
--- a/src/core/custom_protocol_handler.h
+++ b/src/core/custom_protocol_handler.h
@@ -45,6 +45,7 @@
 #include <QtCore/qcompilerdetection.h> // Needed for Q_DECL_OVERRIDE
 
 QT_FORWARD_DECLARE_CLASS(QIODevice)
+QT_FORWARD_DECLARE_CLASS(QWebEngineUrlSchemeHandler)
 
 namespace net {
 class NetworkDelegate;
@@ -54,20 +55,19 @@ class URLRequestJob;
 namespace QtWebEngineCore {
 
 class BrowserContextAdapter;
-class CustomUrlSchemeHandler;
 
 // Implements a ProtocolHandler for custom URL schemes.
 // If |network_delegate_| is NULL then all file requests will fail with ERR_ACCESS_DENIED.
 class QWEBENGINE_EXPORT CustomProtocolHandler : public net::URLRequestJobFactory::ProtocolHandler {
 
 public:
-    CustomProtocolHandler(CustomUrlSchemeHandler *);
+    CustomProtocolHandler(QWebEngineUrlSchemeHandler *);
 
     virtual net::URLRequestJob *MaybeCreateJob(net::URLRequest *request, net::NetworkDelegate *networkDelegate) const Q_DECL_OVERRIDE;
 
 private:
     DISALLOW_COPY_AND_ASSIGN(CustomProtocolHandler);
-    CustomUrlSchemeHandler *m_schemeHandler;
+    QWebEngineUrlSchemeHandler *m_schemeHandler;
 };
 
 } // namespace
diff --git a/src/core/custom_url_scheme_handler.cpp b/src/core/custom_url_scheme_handler.cpp
deleted file mode 100644
index 29791b55590e72b26000d2dc619422034d54fe2c..0000000000000000000000000000000000000000
--- a/src/core/custom_url_scheme_handler.cpp
+++ /dev/null
@@ -1,63 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2015 The Qt Company Ltd.
-** Contact: http://www.qt.io/licensing/
-**
-** 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 The Qt Company. For licensing terms
-** and conditions see http://www.qt.io/terms-conditions. For further
-** information use the contact form at http://www.qt.io/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 "custom_url_scheme_handler.h"
-#include "custom_protocol_handler.h"
-
-namespace QtWebEngineCore {
-
-CustomUrlSchemeHandler::CustomUrlSchemeHandler(const QByteArray &scheme)
-    : m_scheme(scheme)
-{
-}
-
-QByteArray CustomUrlSchemeHandler::scheme() const
-{
-    return m_scheme;
-}
-
-void CustomUrlSchemeHandler::setScheme(const QByteArray &scheme)
-{
-    m_scheme = scheme;
-}
-
-CustomProtocolHandler *CustomUrlSchemeHandler::createProtocolHandler()
-{
-    // Will be owned by the JobFactory.
-    return new CustomProtocolHandler(this);
-}
-
-} // namespace
diff --git a/src/core/custom_url_scheme_handler.h b/src/core/custom_url_scheme_handler.h
deleted file mode 100644
index d866628dea73254e4551e822356085f938ee305d..0000000000000000000000000000000000000000
--- a/src/core/custom_url_scheme_handler.h
+++ /dev/null
@@ -1,71 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2015 The Qt Company Ltd.
-** Contact: http://www.qt.io/licensing/
-**
-** 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 The Qt Company. For licensing terms
-** and conditions see http://www.qt.io/terms-conditions. For further
-** information use the contact form at http://www.qt.io/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 CUSTOM_URL_SCHEME_HANDLER_H_
-#define CUSTOM_URL_SCHEME_HANDLER_H_
-
-#include "qtwebenginecoreglobal.h"
-
-#include <QtCore/QByteArray>
-#include <QtCore/QScopedPointer>
-
-QT_FORWARD_DECLARE_CLASS(QIODevice)
-
-namespace QtWebEngineCore {
-
-class BrowserContextAdapter;
-class CustomProtocolHandler;
-class URLRequestCustomJobDelegate;
-
-class QWEBENGINE_EXPORT CustomUrlSchemeHandler {
-public:
-    explicit CustomUrlSchemeHandler(const QByteArray &);
-    virtual ~CustomUrlSchemeHandler() { }
-
-    QByteArray scheme() const;
-    void setScheme(const QByteArray &);
-    CustomProtocolHandler *createProtocolHandler();
-
-    virtual bool handleJob(URLRequestCustomJobDelegate*) = 0;
-
-private:
-    QByteArray m_scheme;
-};
-
-
-} // namespace
-
-#endif // CUSTOM_URL_SCHEME_HANDLER_H_
diff --git a/src/core/url_request_context_getter_qt.cpp b/src/core/url_request_context_getter_qt.cpp
index c9ebf7f3b1a3f14f61075fce2acff0b1c4f1ab20..771a662b9bfc9a3d8b24a26a3e1c14418feb44a4 100644
--- a/src/core/url_request_context_getter_qt.cpp
+++ b/src/core/url_request_context_getter_qt.cpp
@@ -66,9 +66,9 @@
 #include "net/url_request/ftp_protocol_handler.h"
 #include "net/ftp/ftp_network_layer.h"
 
+#include "api/qwebengineurlschemehandler.h"
 #include "browser_context_adapter.h"
 #include "custom_protocol_handler.h"
-#include "custom_url_scheme_handler.h"
 #include "cookie_monster_delegate_qt.h"
 #include "content_client_qt.h"
 #include "network_delegate_qt.h"
@@ -350,8 +350,8 @@ void URLRequestContextGetterQt::generateJobFactory()
     m_jobFactory->SetProtocolHandler(url::kFtpScheme,
         new net::FtpProtocolHandler(new net::FtpNetworkLayer(m_urlRequestContext->host_resolver())));
 
-    Q_FOREACH (CustomUrlSchemeHandler* handler, m_browserContext->customUrlSchemeHandlers()) {
-        m_jobFactory->SetProtocolHandler(handler->scheme().toStdString(), handler->createProtocolHandler());
+    Q_FOREACH (QWebEngineUrlSchemeHandler *handler, m_browserContext->customUrlSchemeHandlers()) {
+        m_jobFactory->SetProtocolHandler(handler->scheme().toStdString(), new CustomProtocolHandler(handler));
     }
 
     m_urlRequestContext->set_job_factory(m_jobFactory.get());
diff --git a/src/core/url_request_custom_job.cpp b/src/core/url_request_custom_job.cpp
index afdcecdfe2b5a68f852b29063e86dff83bd7d24e..0a81d04a1a389874059cdd9d1d916f7e9836fe91 100644
--- a/src/core/url_request_custom_job.cpp
+++ b/src/core/url_request_custom_job.cpp
@@ -37,7 +37,8 @@
 #include "url_request_custom_job.h"
 #include "url_request_custom_job_delegate.h"
 
-#include "custom_url_scheme_handler.h"
+#include "api/qwebengineurlrequestjob.h"
+#include "api/qwebengineurlschemehandler.h"
 #include "type_conversion.h"
 
 #include "content/public/browser/browser_thread.h"
@@ -53,7 +54,7 @@ using namespace net;
 
 namespace QtWebEngineCore {
 
-URLRequestCustomJob::URLRequestCustomJob(URLRequest *request, NetworkDelegate *networkDelegate, CustomUrlSchemeHandler *schemeHandler)
+URLRequestCustomJob::URLRequestCustomJob(URLRequest *request, NetworkDelegate *networkDelegate, QWebEngineUrlSchemeHandler *schemeHandler)
     : URLRequestJob(request, networkDelegate)
     , m_device(0)
     , m_schemeHandler(schemeHandler)
@@ -236,7 +237,8 @@ void URLRequestCustomJob::startAsync()
     QMutexLocker lock(&m_mutex);
     m_delegate = new URLRequestCustomJobDelegate(this);
     lock.unlock();
-    m_schemeHandler->handleJob(m_delegate);
+    QWebEngineUrlRequestJob *requestJob = new QWebEngineUrlRequestJob(m_delegate);
+    m_schemeHandler->requestStarted(requestJob);
 }
 
 } // namespace
diff --git a/src/core/url_request_custom_job.h b/src/core/url_request_custom_job.h
index 60a1d60b92a99fa321d606c4cc264bdecc6539ba..a994c467a5593a4be971d68bb760c4dfcf152f2a 100644
--- a/src/core/url_request_custom_job.h
+++ b/src/core/url_request_custom_job.h
@@ -45,16 +45,16 @@
 #include <QtCore/QPointer>
 
 QT_FORWARD_DECLARE_CLASS(QIODevice)
+QT_FORWARD_DECLARE_CLASS(QWebEngineUrlSchemeHandler)
 
 namespace QtWebEngineCore {
 
-class CustomUrlSchemeHandler;
 class URLRequestCustomJobDelegate;
 
 // A request job that handles reading custom URL schemes
 class URLRequestCustomJob : public net::URLRequestJob {
 public:
-    URLRequestCustomJob(net::URLRequest *request, net::NetworkDelegate *networkDelegate, CustomUrlSchemeHandler *schemeHandler);
+    URLRequestCustomJob(net::URLRequest *request, net::NetworkDelegate *networkDelegate, QWebEngineUrlSchemeHandler *schemeHandler);
     virtual void Start() Q_DECL_OVERRIDE;
     virtual void Kill() Q_DECL_OVERRIDE;
     virtual bool ReadRawData(net::IOBuffer *buf, int bufSize, int *bytesRead) Q_DECL_OVERRIDE;
@@ -81,7 +81,7 @@ private:
     QMutex m_mutex;
     QPointer<QIODevice> m_device;
     QPointer<URLRequestCustomJobDelegate> m_delegate;
-    CustomUrlSchemeHandler *m_schemeHandler;
+    QWebEngineUrlSchemeHandler *m_schemeHandler;
     std::string m_mimeType;
     std::string m_charset;
     int m_error;
diff --git a/src/webenginewidgets/api/qwebengineprofile.cpp b/src/webenginewidgets/api/qwebengineprofile.cpp
index 66cba9bc38fc317f4ee5239fb5126cbc9c9c9714..934084b6ec3a1215b467e03898775b4b9a60537a 100644
--- a/src/webenginewidgets/api/qwebengineprofile.cpp
+++ b/src/webenginewidgets/api/qwebengineprofile.cpp
@@ -42,7 +42,6 @@
 #include "qwebenginepage.h"
 #include "qwebengineprofile_p.h"
 #include "qwebenginesettings.h"
-#include "qwebengineurlschemehandler_p.h"
 #include "qwebenginescriptcollection_p.h"
 
 #include "browser_context_adapter.h"
@@ -545,8 +544,8 @@ QWebEngineSettings *QWebEngineProfile::settings() const
 const QWebEngineUrlSchemeHandler *QWebEngineProfile::urlSchemeHandler(const QByteArray &scheme) const
 {
     const Q_D(QWebEngineProfile);
-    if (d->m_urlSchemeHandlers.contains(scheme))
-        return d->m_urlSchemeHandlers.value(scheme);
+    if (d->browserContext()->customUrlSchemeHandlers().contains(scheme))
+        return d->browserContext()->customUrlSchemeHandlers().value(scheme);
     return 0;
 }
 
@@ -575,12 +574,11 @@ void QWebEngineProfile::installUrlSchemeHandler(QWebEngineUrlSchemeHandler *hand
         return;
     }
 
-    if (d->m_urlSchemeHandlers.contains(scheme)) {
+    if (d->browserContext()->customUrlSchemeHandlers().contains(scheme)) {
         qWarning() << "URL scheme handler already installed for the scheme: " << scheme;
         return;
     }
-    d->m_urlSchemeHandlers.insert(scheme, handler);
-    d->browserContext()->customUrlSchemeHandlers().append(handler->d_func());
+    d->browserContext()->customUrlSchemeHandlers().insert(scheme, handler);
     d->browserContext()->updateCustomUrlSchemeHandlers();
     connect(handler, SIGNAL(destroyed(QWebEngineUrlSchemeHandler*)), this, SLOT(destroyedUrlSchemeHandler(QWebEngineUrlSchemeHandler*)));
 }
@@ -596,11 +594,10 @@ void QWebEngineProfile::removeUrlSchemeHandler(QWebEngineUrlSchemeHandler *handl
     Q_ASSERT(handler);
     if (!handler)
         return;
-    int count = d->m_urlSchemeHandlers.remove(handler->scheme());
+    int count = d->browserContext()->customUrlSchemeHandlers().remove(handler->scheme());
     if (!count)
         return;
     disconnect(handler, SIGNAL(destroyed(QWebEngineUrlSchemeHandler*)), this, SLOT(destroyedUrlSchemeHandler(QWebEngineUrlSchemeHandler*)));
-    d->browserContext()->removeCustomUrlSchemeHandler(handler->d_func());
     d->browserContext()->updateCustomUrlSchemeHandlers();
 }
 
@@ -612,7 +609,6 @@ void QWebEngineProfile::removeUrlSchemeHandler(QWebEngineUrlSchemeHandler *handl
 void QWebEngineProfile::clearUrlSchemeHandlers()
 {
     Q_D(QWebEngineProfile);
-    d->m_urlSchemeHandlers.clear();
     d->browserContext()->customUrlSchemeHandlers().clear();
     d->browserContext()->updateCustomUrlSchemeHandlers();
 }
diff --git a/src/webenginewidgets/api/qwebengineprofile_p.h b/src/webenginewidgets/api/qwebengineprofile_p.h
index 8ba64c43849c4e30f0fbd36411e5ea4f4d4bc668..7dcc76598ba810ecafefa2e3a8ef821d0a83276f 100644
--- a/src/webenginewidgets/api/qwebengineprofile_p.h
+++ b/src/webenginewidgets/api/qwebengineprofile_p.h
@@ -50,7 +50,6 @@
 
 #include "browser_context_adapter_client.h"
 #include "qwebengineprofile.h"
-#include "qwebengineurlschemehandler_p.h"
 #include "qwebenginescriptcollection.h"
 #include <QMap>
 #include <QPointer>
@@ -85,7 +84,6 @@ private:
     QScopedPointer<QWebEngineScriptCollection> m_scriptCollection;
     QExplicitlySharedDataPointer<QtWebEngineCore::BrowserContextAdapter> m_browserContextRef;
     QMap<quint32, QPointer<QWebEngineDownloadItem> > m_ongoingDownloads;
-    QMap<QByteArray, QWebEngineUrlSchemeHandler *> m_urlSchemeHandlers;
 };
 
 QT_END_NAMESPACE