diff --git a/src/webenginewidgets/api/qwebenginepage.cpp b/src/webenginewidgets/api/qwebenginepage.cpp
index 96468f173579ecb6dc74061da496bc42f0ffa112..a86681191a10a39664b09d7f7a0555cdb3df5792 100644
--- a/src/webenginewidgets/api/qwebenginepage.cpp
+++ b/src/webenginewidgets/api/qwebenginepage.cpp
@@ -902,7 +902,7 @@ QWebEnginePage::~QWebEnginePage()
     Q_D(QWebEnginePage);
     setDevToolsPage(nullptr);
     d->adapter->stopFinding();
-    QWebEngineViewPrivate::bind(d->view, 0);
+    QWebEngineViewPrivate::bind(nullptr, this, true);
 }
 
 QWebEngineHistory *QWebEnginePage::history() const
diff --git a/src/webenginewidgets/api/qwebengineview.cpp b/src/webenginewidgets/api/qwebengineview.cpp
index a207af392f1c67309cebef509d3c6816c1f293e7..aa51e5b0ef4c9c1e34945b2ad68974034d5e754e 100644
--- a/src/webenginewidgets/api/qwebengineview.cpp
+++ b/src/webenginewidgets/api/qwebengineview.cpp
@@ -55,7 +55,7 @@
 
 QT_BEGIN_NAMESPACE
 
-void QWebEngineViewPrivate::bind(QWebEngineView *view, QWebEnginePage *page)
+void QWebEngineViewPrivate::bind(QWebEngineView *view, QWebEnginePage *page, bool pageBeingDeleted)
 {
     if (view && page == view->d_func()->page)
         return;
@@ -64,20 +64,22 @@ void QWebEngineViewPrivate::bind(QWebEngineView *view, QWebEnginePage *page)
         // Un-bind page from its current view.
         if (QWebEngineView *oldView = page->d_func()->view) {
             page->disconnect(oldView);
-            oldView->d_func()->page = 0;
+            oldView->d_func()->page = nullptr;
         }
         page->d_func()->view = view;
-        page->d_func()->adapter->reattachRWHV();
+        if (!pageBeingDeleted)
+            page->d_func()->adapter->reattachRWHV();
     }
 
     if (view) {
         // Un-bind view from its current page.
         if (QWebEnginePage *oldPage = view->d_func()->page) {
             oldPage->disconnect(view);
-            oldPage->d_func()->view = 0;
-            oldPage->d_func()->adapter->reattachRWHV();
+            oldPage->d_func()->view = nullptr;
             if (oldPage->parent() == view)
                 delete oldPage;
+            else
+                oldPage->d_func()->adapter->reattachRWHV();
         }
         view->d_func()->page = page;
     }
@@ -147,8 +149,7 @@ QWebEngineView::QWebEngineView(QWidget *parent)
 
 QWebEngineView::~QWebEngineView()
 {
-    Q_D(QWebEngineView);
-    QWebEngineViewPrivate::bind(0, d->page);
+    QWebEngineViewPrivate::bind(this, nullptr);
 }
 
 QWebEnginePage* QWebEngineView::page() const
diff --git a/src/webenginewidgets/api/qwebengineview_p.h b/src/webenginewidgets/api/qwebengineview_p.h
index 7f0cdac457325eda96e2b193d52dd05cb19fbb4f..bfb44bec5b29c05cea7702aba08e6f0378e81e16 100644
--- a/src/webenginewidgets/api/qwebengineview_p.h
+++ b/src/webenginewidgets/api/qwebengineview_p.h
@@ -65,7 +65,7 @@ public:
     Q_DECLARE_PUBLIC(QWebEngineView)
     QWebEngineView *q_ptr;
 
-    static void bind(QWebEngineView *view, QWebEnginePage *page);
+    static void bind(QWebEngineView *view, QWebEnginePage *page, bool pageBeingDeleted = false);
 
     QWebEngineViewPrivate();
 
diff --git a/tests/auto/widgets/qwebengineview/tst_qwebengineview.cpp b/tests/auto/widgets/qwebengineview/tst_qwebengineview.cpp
index 5f30fa6b932b9d9d2f59b30506d4fa45a39d8dd1..1499a5f056d08b0b52802f75497155822c26f7f3 100644
--- a/tests/auto/widgets/qwebengineview/tst_qwebengineview.cpp
+++ b/tests/auto/widgets/qwebengineview/tst_qwebengineview.cpp
@@ -188,6 +188,7 @@ private Q_SLOTS:
     void webUIURLs();
     void visibilityState();
     void jsKeyboardEvent();
+    void deletePage();
 };
 
 // This will be called before the first test function is executed.
@@ -2793,5 +2794,19 @@ void tst_QWebEngineView::jsKeyboardEvent()
     QCOMPARE(evaluateJavaScriptSync(view.page(), "log"), expected);
 }
 
+void tst_QWebEngineView::deletePage()
+{
+    QWebEngineView view;
+    QWebEnginePage *page = view.page();
+    QVERIFY(page);
+    QCOMPARE(page->parent(), &view);
+    delete page;
+    // Test that a new page is created and that it is useful:
+    QVERIFY(view.page());
+    QSignalSpy spy(view.page(), &QWebEnginePage::loadFinished);
+    view.page()->load(QStringLiteral("about:blank"));
+    QTRY_VERIFY(spy.count());
+}
+
 QTEST_MAIN(tst_QWebEngineView)
 #include "tst_qwebengineview.moc"