diff --git a/src/module/module_qt_window.cc b/src/module/module_qt_window.cc
index 7eb7f57821ece06292600e7e174cb8901d170405..a1cb86d2d5cd3489abd37d5a4904f2dd49d7f392 100644
--- a/src/module/module_qt_window.cc
+++ b/src/module/module_qt_window.cc
@@ -214,12 +214,17 @@ module_qt_window_new(struct module_qt_window_s **win, struct queue *queue, lkt_d
         RETURN_UNLESS(*win, "Out of memory", false);
         memset(*win, 0, sizeof(struct module_qt_window_s));
 
-        (*win)->queue = queue;
-        (*win)->db    = db;
+        (*win)->queue    = queue;
+        (*win)->db       = db;
+        (*win)->launched = false;
 
         pthread_t thread;
         RETURN_IF(pthread_create(&thread, nullptr, ___create_mpv_widget, *win),
                   "Failed to launch the Qt thread", false);
+
+        timespec timeToWait = { 0, 10000000 };
+        while (!(*win)->launched)
+            nanosleep(&timeToWait, nullptr);
     }
 
     return true;
diff --git a/src/module/module_qt_window.hh b/src/module/module_qt_window.hh
index 9ac0880714d3738700224fa8228a2f413992545a..760f16a2304d2446749a3ed86cdfba17e916103b 100644
--- a/src/module/module_qt_window.hh
+++ b/src/module/module_qt_window.hh
@@ -11,6 +11,7 @@ struct module_qt_window_s {
     MpvWidget *mpv_widget;
 
     struct module_reg *reg;
+    bool launched;
 
     /* Things from the server */
     struct queue *queue;
diff --git a/src/module/qt_window/mainwindow.cc b/src/module/qt_window/mainwindow.cc
index 38eb490d825b9206721137e5acd1d9cd74d21044..4ac58feed292123fbe5dac01d17ed5babaf1a9e2 100644
--- a/src/module/qt_window/mainwindow.cc
+++ b/src/module/qt_window/mainwindow.cc
@@ -3,7 +3,8 @@
 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);
+    qt_window->mpv_widget = new MpvWidget(qt_window->queue, qt_window->db, qt_window->reg,
+                                          &(qt_window->launched), this);
     connect(qt_window->mpv_widget, &MpvWidget::titleChanged, this, &MainWindow::updateWindowTitle);
     setCentralWidget(qt_window->mpv_widget);
     setFocusPolicy(Qt::StrongFocus);
diff --git a/src/module/qt_window/mpvwidget.cc b/src/module/qt_window/mpvwidget.cc
index e81597c39eee93bc4cc7ed0a225ae29790e439aa..be53b3caaa680c60849c87a5d1171855b3e90357 100644
--- a/src/module/qt_window/mpvwidget.cc
+++ b/src/module/qt_window/mpvwidget.cc
@@ -28,11 +28,13 @@ get_proc_address(void *ctx, const char *name)
     return reinterpret_cast<void *>(glctx->getProcAddress(QByteArray(name)));
 }
 
-MpvWidget::MpvWidget(struct queue *queue, lkt_db *db, struct module_reg *reg, QWidget *parent)
+MpvWidget::MpvWidget(struct queue *queue, lkt_db *db, struct module_reg *reg, bool *launched,
+                     QWidget *parent)
     : QOpenGLWidget(parent)
     , m_queue(queue)
     , m_db(db)
     , m_reg(reg)
+    , m_launched(launched)
 {
     mpv = mpv_create();
     if (!mpv)
@@ -136,6 +138,7 @@ MpvWidget::handle_mpv_event(mpv_event *event)
 
     case MPV_EVENT_SHUTDOWN:
         lkt_queue_send(m_queue, LKT_EVENT_PLAY_TOGGLE, LKT_PLAY_STOP);
+        *m_launched = false;
         reg_call(m_reg, "close", 1);
         break;
 
@@ -166,6 +169,7 @@ MpvWidget::handle_mpv_event(mpv_event *event)
     case MPV_EVENT_IDLE:
         lkt_queue_make_available(m_queue, static_cast<LKT_EVENT_TYPE>(LKT_EVENT_PLAY));
         lkt_queue_make_available(m_queue, static_cast<LKT_EVENT_TYPE>(LKT_EVENT_PROP));
+        *m_launched = true;
         emit titleChanged("[Lektord] Stopped");
         break;
 
diff --git a/src/module/qt_window/mpvwidget.hh b/src/module/qt_window/mpvwidget.hh
index 244bcc9c5eb4781f7848368bb06fbd38c3ce7d13..93aee66b32e66c160947c3b3c11a9a7b0e2785e4 100644
--- a/src/module/qt_window/mpvwidget.hh
+++ b/src/module/qt_window/mpvwidget.hh
@@ -9,7 +9,8 @@
 class MpvWidget Q_DECL_FINAL : public QOpenGLWidget {
     Q_OBJECT
 public:
-    MpvWidget(struct queue *queue, lkt_db *db, struct module_reg *reg, QWidget *parent);
+    MpvWidget(struct queue *queue, lkt_db *db, struct module_reg *reg, bool *launched,
+              QWidget *parent);
     ~MpvWidget() override;
     void command(const QVariant &params);
     void setProperty(const QString &name, const QVariant &value);
@@ -36,6 +37,7 @@ private:
     struct queue *m_queue;
     lkt_db *m_db;
     struct module_reg *m_reg;
+    bool *m_launched;
 
     int m_position;
     int m_duration;