diff --git a/src/module/module_qt_window.cc b/src/module/module_qt_window.cc
index 7b78f826f5ecfffb3899886d7ad520a1a9110a36..ae5d78901156249c8ad0e9b9d864d9512222ca60 100644
--- a/src/module/module_qt_window.cc
+++ b/src/module/module_qt_window.cc
@@ -189,7 +189,6 @@ module_qt_window_new(struct module_qt_window_s **win, struct queue *queue, lkt_d
     (void)mod_free;
     (void)mod_close;
     RETURN_UNLESS(win, "Invalid arguments", false);
-    struct poller_thread_arg *arg;
 
     if (*win == nullptr) {
         *win = LKT_ALLOC_STRUCT(module_qt_window_s);
@@ -200,11 +199,8 @@ module_qt_window_new(struct module_qt_window_s **win, struct queue *queue, lkt_d
         (*win)->db    = db;
         (*win)->reg   = qt_window_reg;
 
-        arg = LKT_ALLOC_STRUCT(poller_thread_arg);
-        RETURN_UNLESS(arg, "Out of memory", false);
-        arg->args = *win;
-        RETURN_IF(poller_new(&(*win)->self, ___create_mpv_widget, arg),
-                  "Failed to launch the SDL thread", false);
+        pthread_t thread;
+        RETURN_IF(pthread_create(&thread, nullptr, ___create_mpv_widget, *win), "Failed to launch the Qt thread", false);
     }
 
     return true;
diff --git a/src/module/qt_window/mainwindow.cc b/src/module/qt_window/mainwindow.cc
index 01b6a280300f350268b9f49799339ba778e86641..38eb490d825b9206721137e5acd1d9cd74d21044 100644
--- a/src/module/qt_window/mainwindow.cc
+++ b/src/module/qt_window/mainwindow.cc
@@ -1,6 +1,6 @@
 #include "mainwindow.hh"
 
-MainWindow::MainWindow(struct module_qt_window_s *qt_window, QWidget *parent)
+MainWindow::MainWindow(module_qt_window_s *qt_window, QWidget *parent)
     : QMainWindow(parent)
 {
     qt_window->mpv_widget = new MpvWidget(qt_window->queue, qt_window->db, qt_window->reg, this);
@@ -13,14 +13,13 @@ MainWindow::MainWindow(struct module_qt_window_s *qt_window, QWidget *parent)
 }
 
 void
-MainWindow::closeMpv(bool *exited) noexcept
+MainWindow::closeMpv() noexcept
 {
-    emit emitCloseMpv(exited);
+    emit emitCloseMpv();
 }
 
 void
-MainWindow::__closeMpv(bool *exited)
+MainWindow::__closeMpv()
 {
-    delete centralWidget();
-    *exited = true;
+    delete this;
 }
diff --git a/src/module/qt_window/mainwindow.hh b/src/module/qt_window/mainwindow.hh
index 6af91748641442cfbc7bbd491f175c4d7b0d931f..bec8b7b961f53a307201267513929832b8145c05 100644
--- a/src/module/qt_window/mainwindow.hh
+++ b/src/module/qt_window/mainwindow.hh
@@ -9,17 +9,17 @@
 class MainWindow : public QMainWindow {
     Q_OBJECT
 public:
-    explicit MainWindow(struct module_qt_window_s *qt_window, QWidget *parent = nullptr);
+    explicit MainWindow(module_qt_window_s *qt_window, QWidget *parent = nullptr);
 
 public slots:
     inline void updateWindowTitle(QString str) noexcept { setWindowTitle(str); }
 
 signals:
-    void emitCloseMpv(bool *);
+    void emitCloseMpv();
 
 private slots:
-    void __closeMpv(bool *);
+    void __closeMpv();
 
 public:
-    void closeMpv(bool *) noexcept;
+    void closeMpv() noexcept;
 };
diff --git a/src/module/qt_window/mpvwidget_interface.cc b/src/module/qt_window/mpvwidget_interface.cc
index aba2f6c1facc6ae9457bb15e831e87cacf248151..d687366847cd9b910f48d132f9eed9ec19ce0744 100644
--- a/src/module/qt_window/mpvwidget_interface.cc
+++ b/src/module/qt_window/mpvwidget_interface.cc
@@ -1,22 +1,25 @@
 #include "mpvwidget_interface.hh"
-#include "mainwindow.hh"
 
 #include <QApplication>
+#include <QEventLoop>
+
+#include "mainwindow.hh"
 
 void *
-___create_mpv_widget(struct poller_thread_arg *arg)
+___create_mpv_widget(void *arg)
 {
     lkt_thread_set_name("lektord/qt-win");
 
     /* Unsage reinterpret cast, but isok */
-    struct module_qt_window_s *qt_window = reinterpret_cast<struct module_qt_window_s *>(arg->args);
+    module_qt_window_s *qt_window = reinterpret_cast<module_qt_window_s *>(arg);
 
     int argc = 0;
-    QApplication a(argc, nullptr);
+    QApplication app(argc, nullptr);
     setlocale(LC_NUMERIC, "C");
     qt_window->main_window = new MainWindow(qt_window);
     qt_window->main_window->show();
-    a.exec();
+    app.exec();
+
     return nullptr;
 }
 
@@ -65,8 +68,6 @@ ___module_qt_window_toggle_pause(struct module_qt_window_s *win)
 bool
 ___module_qt_window_close(struct module_qt_window_s *win)
 {
-    bool exited = false;
-    win->main_window->closeMpv(&exited);
-    delete win->main_window;
+    win->main_window->closeMpv();
     return true;
 }
diff --git a/src/module/qt_window/mpvwidget_interface.hh b/src/module/qt_window/mpvwidget_interface.hh
index f79eca9af847f25a72c97392c3e9fa2c16371919..0f953e56bc1a05a627f410b00649c7395886ccf5 100644
--- a/src/module/qt_window/mpvwidget_interface.hh
+++ b/src/module/qt_window/mpvwidget_interface.hh
@@ -3,7 +3,7 @@
 #include <lektor/common.h>
 #include "../module_qt_window.hh"
 
-void *___create_mpv_widget(struct poller_thread_arg *arg);
+void *___create_mpv_widget(void *arg);
 
 bool ___module_qt_window_get_elapsed(struct module_qt_window_s *, int *);
 bool ___module_qt_window_get_duration(struct module_qt_window_s *, int *);