diff --git a/src/quick/scenegraph/qsgrenderloop.cpp b/src/quick/scenegraph/qsgrenderloop.cpp
index 52df55fa92d48ade9419bf2f84ce17a68c525939..ac1bdb7841924ec35d9a6d613772688b63a6f274 100644
--- a/src/quick/scenegraph/qsgrenderloop.cpp
+++ b/src/quick/scenegraph/qsgrenderloop.cpp
@@ -238,6 +238,8 @@ void QSGGuiThreadRenderLoop::hide(QQuickWindow *window)
 
     m_windows.remove(window);
     QQuickWindowPrivate *cd = QQuickWindowPrivate::get(window);
+    if (gl)
+        gl->makeCurrent(window);
     cd->cleanupNodesOnShutdown();
 
     if (m_windows.size() == 0) {
diff --git a/src/quick/scenegraph/qsgwindowsrenderloop.cpp b/src/quick/scenegraph/qsgwindowsrenderloop.cpp
index 0c128d5caef993a795073184a8fd4208710a1f3c..0b6d42aca6472b4f0cf37ff5e464e9ff9e555a1f 100644
--- a/src/quick/scenegraph/qsgwindowsrenderloop.cpp
+++ b/src/quick/scenegraph/qsgwindowsrenderloop.cpp
@@ -240,7 +240,11 @@ void QSGWindowsRenderLoop::hide(QQuickWindow *window)
     if (window->isExposed())
         handleObscurity();
 
+    if (!m_gl)
+        return;
+
     QQuickWindowPrivate *cd = QQuickWindowPrivate::get(window);
+    m_gl->makeCurrent(window);
     cd->cleanupNodesOnShutdown();
 
     // If this is the last tracked window, check for persistent SG and GL and
diff --git a/tests/auto/quick/scenegraph/data/simple.qml b/tests/auto/quick/scenegraph/data/simple.qml
new file mode 100644
index 0000000000000000000000000000000000000000..b2924f135ee3a4b6e4231719a05ede1a33cfa59f
--- /dev/null
+++ b/tests/auto/quick/scenegraph/data/simple.qml
@@ -0,0 +1,60 @@
+/****************************************************************************
+**
+** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the test suite 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 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights.  These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 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 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.2
+
+Rectangle {
+    width: 200
+    height: 200
+    color: "steelblue"
+    Rectangle {
+        width: 150
+        height: 150
+        anchors.centerIn: parent
+        color: "palegreen"
+        rotation: 45
+        Text {
+            rotation: -45
+            text: "Simple QML.."
+            anchors.centerIn: parent
+        }
+    }
+}
diff --git a/tests/auto/quick/scenegraph/scenegraph.pro b/tests/auto/quick/scenegraph/scenegraph.pro
index 105221b7f4e449a1c682f5f2f499c2f16c261df0..1aa73ca60abfda8ad116509ee09ad1865c3a495c 100644
--- a/tests/auto/quick/scenegraph/scenegraph.pro
+++ b/tests/auto/quick/scenegraph/scenegraph.pro
@@ -11,4 +11,5 @@ QT += core-private gui-private qml-private quick-private  testlib
 DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0
 
 OTHER_FILES += \
-    data/render_OutOfFloatRange.qml
+    data/render_OutOfFloatRange.qml \
+    data/simple.qml
diff --git a/tests/auto/quick/scenegraph/tst_scenegraph.cpp b/tests/auto/quick/scenegraph/tst_scenegraph.cpp
index 3b79f01f12df7234f8f978db008104f1d8386124..780d5a97dbff87dff6838f3980994c0660c44358 100644
--- a/tests/auto/quick/scenegraph/tst_scenegraph.cpp
+++ b/tests/auto/quick/scenegraph/tst_scenegraph.cpp
@@ -58,6 +58,8 @@ private slots:
 
     void render_data();
     void render();
+
+    void hideWithOtherContext();
 };
 
 template <typename T> class ScopedList : public QList<T> {
@@ -401,6 +403,40 @@ void tst_SceneGraph::render()
     }
 }
 
+// Testcase for QTBUG-34898. We make another context current on another surface
+// in the GUI thread and hide the QQuickWindow while the other context is
+// current on the other window.
+void tst_SceneGraph::hideWithOtherContext()
+{
+    QWindow window;
+    window.setSurfaceType(QWindow::OpenGLSurface);
+    window.resize(100, 100);
+    window.create();
+    QOpenGLContext context;
+    context.create();
+    bool renderingOnMainThread = false;
+
+    {
+        QQuickView view;
+        view.setSource(QUrl::fromLocalFile("data/simple.qml"));
+        view.setResizeMode(QQuickView::SizeViewToRootObject);
+        view.show();
+        QVERIFY(QTest::qWaitForWindowExposed(&view));
+
+        renderingOnMainThread = view.openglContext()->thread() == QGuiApplication::instance()->thread();
+
+        // Make the local context current on the local window...
+        context.makeCurrent(&window);
+    }
+
+    // The local context should no longer be the current one. It is not
+    // rebound because all well behaving Qt/OpenGL applications are
+    // required to makeCurrent their context again before making any
+    // GL calls to a new frame (see QOpenGLContext docs).
+    QVERIFY(!renderingOnMainThread || QOpenGLContext::currentContext() != &context);
+}
+
+
 #include "tst_scenegraph.moc"
 
 QTEST_MAIN(tst_SceneGraph)