diff --git a/Applications/DataExplorer/VtkVis/VisualizationWidget.cpp b/Applications/DataExplorer/VtkVis/VisualizationWidget.cpp
index 229ba5444343299e7343ec446ccb4f3fc6d27a8b..c612e8f7104158ce9741740fbf6bb2bcb2baf1e9 100644
--- a/Applications/DataExplorer/VtkVis/VisualizationWidget.cpp
+++ b/Applications/DataExplorer/VtkVis/VisualizationWidget.cpp
@@ -20,19 +20,22 @@
 #include "VtkCustomInteractorStyle.h"
 #include "VtkPickCallback.h"
 
+#include <vtkAxesActor.h>
 #include <vtkCamera.h>
 #include <vtkCellPicker.h>
-#include <vtkRenderWindow.h>
-#include <vtkRenderer.h>
-#include <vtkSmartPointer.h>
-
-#include <vtkAxesActor.h>
 #include <vtkCommand.h>
+#include <vtkGenericOpenGLRenderWindow.h>
 #include <vtkInteractorStyleRubberBandZoom.h>
 #include <vtkInteractorStyleSwitch.h>
 #include <vtkMath.h>
+#include <vtkNew.h>
 #include <vtkOrientationMarkerWidget.h>
 #include <vtkPNGWriter.h>
+#include <vtkRenderer.h>
+#include <vtkRenderWindow.h>
+#include <vtkRenderWindow.h>
+#include <vtkRenderWindowInteractor.h>
+#include <vtkSmartPointer.h>
 #include <vtkSmartPointer.h>
 #include <vtkWindowToImageFilter.h>
 
@@ -49,30 +52,31 @@ VisualizationWidget::VisualizationWidget(QWidget* parent /*= 0*/)
 {
     this->setupUi(this);
 
+    vtkNew<vtkRenderer> ren;
+    _vtkRender = ren;
+
+    vtkNew<vtkGenericOpenGLRenderWindow> renderWindow;
+    vtkWidget->SetRenderWindow(renderWindow);
+    vtkWidget->GetRenderWindow()->AddRenderer(ren);
+
     _interactorStyle = VtkCustomInteractorStyle::New();
-    vtkWidget->GetRenderWindow()->GetInteractor()->SetInteractorStyle(_interactorStyle);
+    renderWindow->GetInteractor()->SetInteractorStyle(_interactorStyle);
+    _interactorStyle->SetDefaultRenderer(ren);
 
     _vtkPickCallback = VtkPickCallback::New();
     vtkSmartPointer<vtkCellPicker> picker = vtkSmartPointer<vtkCellPicker>::New();
     picker->AddObserver(vtkCommand::EndPickEvent, _vtkPickCallback);
-    vtkWidget->GetRenderWindow()->GetInteractor()->SetPicker(picker);
-
-    vtkSmartPointer<vtkRenderWindow> renderWindow = vtkWidget->GetRenderWindow();
-    renderWindow->StereoCapableWindowOn();
-    renderWindow->SetStereoTypeToCrystalEyes();
-    _vtkRender = vtkRenderer::New();
-    renderWindow->AddRenderer(_vtkRender);
-    _interactorStyle->SetDefaultRenderer(_vtkRender);
+    renderWindow->GetInteractor()->SetPicker(picker);
 
     QSettings settings;
 
-    _vtkRender->SetBackground(0.0,0.0,0.0);
+    ren->SetBackground(0.0,0.0,0.0);
 
     // Create an orientation marker using vtkAxesActor
     vtkSmartPointer<vtkAxesActor> axesActor = vtkSmartPointer<vtkAxesActor>::New();
     _markerWidget = vtkOrientationMarkerWidget::New();
     _markerWidget->SetOrientationMarker(axesActor);
-    _markerWidget->SetInteractor(vtkWidget->GetRenderWindow()->GetInteractor());
+    _markerWidget->SetInteractor(renderWindow->GetInteractor());
     _markerWidget->EnabledOn();
     _markerWidget->InteractiveOff();
 
@@ -88,7 +92,6 @@ VisualizationWidget::~VisualizationWidget()
     _vtkPickCallback->Delete();
     _interactorStyle->Delete();
     _markerWidget->Delete();
-    _vtkRender->Delete();
 }
 
 VtkCustomInteractorStyle* VisualizationWidget::interactorStyle() const
diff --git a/Applications/DataExplorer/VtkVis/VisualizationWidgetBase.ui b/Applications/DataExplorer/VtkVis/VisualizationWidgetBase.ui
index 80476d5e960bd5c6d713bebb8101334ff6370f5b..fc8409953b1ae1a52b365df8e9dc4573fd00dce2 100644
--- a/Applications/DataExplorer/VtkVis/VisualizationWidgetBase.ui
+++ b/Applications/DataExplorer/VtkVis/VisualizationWidgetBase.ui
@@ -535,7 +535,7 @@
     </layout>
    </item>
    <item>
-    <widget class="QVTKWidget" name="vtkWidget" native="true">
+    <widget class="QVTKOpenGLWidget" name="vtkWidget" native="true">
      <property name="sizePolicy">
       <sizepolicy hsizetype="MinimumExpanding" vsizetype="MinimumExpanding">
        <horstretch>0</horstretch>
@@ -548,9 +548,9 @@
  </widget>
  <customwidgets>
   <customwidget>
-   <class>QVTKWidget</class>
+   <class>QVTKOpenGLWidget</class>
    <extends>QWidget</extends>
-   <header>QVTKWidget.h</header>
+   <header>QVTKOpenGLWidget.h</header>
   </customwidget>
  </customwidgets>
  <resources>
diff --git a/Applications/DataExplorer/main.cpp b/Applications/DataExplorer/main.cpp
index ee99061ff729464e88ebbdc472a92a179bc9a203..006000283bb94b187a51eb34adabf9ba4968fa2b 100644
--- a/Applications/DataExplorer/main.cpp
+++ b/Applications/DataExplorer/main.cpp
@@ -1,6 +1,8 @@
 #include "mainwindow.h"
 
 #include <QApplication>
+#include <QSurfaceFormat>
+#include <QVTKOpenGLWidget.h>
 #include <logog/include/logog.hpp>
 #include <memory>
 
@@ -23,6 +25,9 @@ int main(int argc, char* argv[])
     InitializeSdkObjects(lSdkManager, lScene);
 #endif
 
+    // needed to ensure appropriate OpenGL context is created for VTK rendering.
+    QSurfaceFormat::setDefaultFormat(QVTKOpenGLWidget::defaultFormat());
+
     auto myOutputWindow = vtkSmartPointer<VtkConsoleOutputWindow>::New();
     vtkOutputWindow::SetInstance(myOutputWindow);
 
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 321a8d7ae7e0ed66292891b67b182ab072951b01..d62cdd84678b4775b087a3f5821a640edb4e1675 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -141,6 +141,7 @@
 - added custom VTK filter to represent raster data as point clouds. [#2121](https://github.com/ufz/ogs/pull/2121)
 - geometrical points can now be converted into station points. [#2369](https://github.com/ufz/ogs/pull/2369)
 - fixed issue with geometrical surfaces not being loaded correctly. [#2388](https://github.com/ufz/ogs/pull/2388)
+- Replace deprecated QVTKWidget with QVTKOpenGLWidget [#2432](https://github.com/ufz/ogs/pull/2432)
 
 ### Other notable code changes
 
diff --git a/Jenkinsfile b/Jenkinsfile
index 4ead58b2409998bd93758c6a5534863916a17a2b..889857b9f9575822fbb5db20570e1586a40f9a0a 100644
--- a/Jenkinsfile
+++ b/Jenkinsfile
@@ -210,7 +210,7 @@ pipeline {
           post {
             always {
               recordIssues enabledForFailure: true, filters: [
-                excludeFile('.*qrc_icons\\.cpp.*'), excludeMessage('.*QVTKWidget.*'),
+                excludeFile('.*qrc_icons\\.cpp.*'),
                 excludeMessage('.*tmpnam.*')],
                 tools: [gcc4(name: 'GCC-GUI', id: 'gcc4-gui',
                              pattern: 'build/build*.log')],
diff --git a/scripts/cmake/ConanSetup.cmake b/scripts/cmake/ConanSetup.cmake
index d3cd29dc5890ad1e27b75b4fe78de3bec1e2423b..0e1eb1080503c035cfee0e1782a056354b4f7cb3 100644
--- a/scripts/cmake/ConanSetup.cmake
+++ b/scripts/cmake/ConanSetup.cmake
@@ -91,7 +91,6 @@ if(APPLE)
 endif()
 if(MSVC)
     set(CONAN_IMPORTS ${CONAN_IMPORTS} "bin, *.dll* -> ./bin")
-    set(CONAN_IMPORTS ${CONAN_IMPORTS} "plugins/platforms, *.dll* -> ./bin/platforms")
 endif()
 if(UNIX AND NOT APPLE)
     set(CONAN_IMPORTS ${CONAN_IMPORTS} "lib, *.so* -> ./lib")
diff --git a/scripts/cmake/packaging/PackagingMac.cmake b/scripts/cmake/packaging/PackagingMac.cmake
index 8854394bedc47cd48749a4073dad2fa6f05856cd..3c5fb14a10e9a0a2f1819fcd83ee3ace016fd16f 100644
--- a/scripts/cmake/packaging/PackagingMac.cmake
+++ b/scripts/cmake/packaging/PackagingMac.cmake
@@ -27,8 +27,8 @@ endif()
 
 if(OGS_BUILD_GUI)
     install_qt5_plugin("Qt5::QCocoaIntegrationPlugin" QT_PLUGINS)
-    file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/qt.conf"
+    file(WRITE "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/qt.conf"
         "[Paths]\nPlugins = ../${_qt_plugin_dir}\n")
-    install(FILES "${CMAKE_CURRENT_BINARY_DIR}/qt.conf"
+    install(FILES "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/qt.conf"
         DESTINATION bin COMPONENT ogs_gui)
 endif()
diff --git a/scripts/cmake/packaging/PackagingMacros.cmake b/scripts/cmake/packaging/PackagingMacros.cmake
index ba153c854b3227a2f324c150419965f7555f67b3..de831ab953690faa5d739983498059b7f7b0fc23 100644
--- a/scripts/cmake/packaging/PackagingMacros.cmake
+++ b/scripts/cmake/packaging/PackagingMacros.cmake
@@ -75,6 +75,7 @@ macro(install_qt5_plugin _qt_plugin_name _qt_plugins_var)
             set(_qt_plugin_dir "plugins")
         endif()
         set(_qt_plugin_dest "${_qt_plugin_dir}/${_qt_plugin_type}")
+        file(COPY "${_qt_plugin_path}" DESTINATION "${_qt_plugin_dest}")
         install(FILES "${_qt_plugin_path}"
             DESTINATION "${_qt_plugin_dest}"
             ${COMPONENT})
diff --git a/scripts/cmake/packaging/PackagingWin.cmake b/scripts/cmake/packaging/PackagingWin.cmake
index 983881a9e2d893aaaef6ef2a5b51561d09b5eea3..48ea5fdbeb8b85c4270285c3dff3a3837e91cdad 100644
--- a/scripts/cmake/packaging/PackagingWin.cmake
+++ b/scripts/cmake/packaging/PackagingWin.cmake
@@ -29,8 +29,8 @@ endif()
 
 if(OGS_BUILD_GUI)
     install_qt5_plugin("Qt5::QWindowsIntegrationPlugin" QT_PLUGINS)
-    file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/qt.conf"
+    file(WRITE "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/qt.conf"
         "[Paths]\nPlugins = ../${_qt_plugin_dir}\n")
-    install(FILES "${CMAKE_CURRENT_BINARY_DIR}/qt.conf"
+    install(FILES "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/qt.conf"
         DESTINATION bin COMPONENT ogs_gui)
 endif()