diff --git a/CMakeLists.txt b/CMakeLists.txt
index 4e9cfd55943579555582a2fb69eddb1c373ef7f9..0e9a04eb4a7afa7a4b2970e4695696fec05e7e65 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -151,6 +151,7 @@ set(lektor_module_SOURCES
     src/module/qt_window/mpvwidget.cpp
     src/module/qt_window/mpvwidget_interface.cpp
     src/module/qt_window/qthelper.cpp
+    src/module/qt_window/mainwindow.cpp
     src/module/thread.c
 )
 
diff --git a/src/module/module_qt_window.h b/src/module/module_qt_window.h
index acdd44d90f402fd94fdec561ebeb29936c349d56..7cc63cb594e75829a6d0d8daf7650dd982dccb36 100644
--- a/src/module/module_qt_window.h
+++ b/src/module/module_qt_window.h
@@ -3,15 +3,19 @@
 
 #if defined( __cplusplus)
 extern "C" {
-class MpvWidget;
+#define DECLARE_CPP_CLASS(c) class c;
 #else
-typedef struct MpvWidget MpvWidget;
+#define DECLARE_CPP_CLASS(c) typedef struct c c;
 #endif
+DECLARE_CPP_CLASS(MpvWidget)
+DECLARE_CPP_CLASS(MainWindow)
+#undef DECLARE_CPP_CLASS
 
 #include <lektor/common.h>
 #include "thread.h"
 
 struct module_qt_window_s {
+    MainWindow* main_window;
     MpvWidget* mpv_widget;
 
     /* Thread related */
diff --git a/src/module/qt_window/mainwindow.cpp b/src/module/qt_window/mainwindow.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..46e56c045510e0de5eb4686ba8655dd32e44f27d
--- /dev/null
+++ b/src/module/qt_window/mainwindow.cpp
@@ -0,0 +1,7 @@
+#include "mainwindow.hh"
+
+MainWindow::MainWindow(struct module_qt_window_s* qt_window, QWidget *parent) :
+    QMainWindow(parent)
+{
+    qt_window->mpv_widget = new MpvWidget(qt_window->queue, qt_window->db, this);
+}
diff --git a/src/module/qt_window/mainwindow.hh b/src/module/qt_window/mainwindow.hh
new file mode 100644
index 0000000000000000000000000000000000000000..ad3e51425d06221afb9163e8b13f1db0fc3d49c4
--- /dev/null
+++ b/src/module/qt_window/mainwindow.hh
@@ -0,0 +1,17 @@
+#ifndef __LKT_MODULE_QT_WINDOW_MAINWINDOW__
+#define __LKT_MODULE_QT_WINDOW_MAINWINDOW__
+
+#include <QtWidgets/QWidget>
+#include <QtGui>
+#include <QMainWindow>
+#include "../module_qt_window.h"
+#include "mpvwidget.hh"
+
+class MainWindow : public QMainWindow
+{
+    Q_OBJECT
+public:
+    explicit MainWindow(struct module_qt_window_s *qt_window, QWidget *parent = 0);
+};
+
+#endif // __LKT_MODULE_QT_WINDOW_MAINWINDOW__
diff --git a/src/module/qt_window/mpvwidget.cpp b/src/module/qt_window/mpvwidget.cpp
index 64c89e590e3f35c63d56aed0b2144ce5915e68fb..558674b63b3399a07d88c1fbffe418b4d2b31fe0 100644
--- a/src/module/qt_window/mpvwidget.cpp
+++ b/src/module/qt_window/mpvwidget.cpp
@@ -20,8 +20,8 @@ static void *get_proc_address(void *ctx, const char *name) {
     return reinterpret_cast<void *>(glctx->getProcAddress(QByteArray(name)));
 }
 
-MpvWidget::MpvWidget(struct queue *queue, lkt_db *db)
-    : QOpenGLWidget(),
+MpvWidget::MpvWidget(struct queue *queue, lkt_db *db, QWidget* parent)
+    : QOpenGLWidget(parent),
     m_queue(queue),
     m_db(db)
 {
diff --git a/src/module/qt_window/mpvwidget.hh b/src/module/qt_window/mpvwidget.hh
index 0c0f91d6fa1fea76321d8b0abcc5460cfa92e39d..86ea4662e98ec091eec805295c893f02c8cba241 100644
--- a/src/module/qt_window/mpvwidget.hh
+++ b/src/module/qt_window/mpvwidget.hh
@@ -14,7 +14,7 @@ class MpvWidget Q_DECL_FINAL: public QOpenGLWidget
 {
     Q_OBJECT
 public:
-    MpvWidget(struct queue *queue, lkt_db *db);
+    MpvWidget(struct queue *queue, lkt_db *db, QWidget* parent);
     ~MpvWidget();
     void command(const QVariant& params);
     void setProperty(const QString& name, const QVariant& value);
diff --git a/src/module/qt_window/mpvwidget_interface.cpp b/src/module/qt_window/mpvwidget_interface.cpp
index 56c9af81043859c5129ed8e303006722f83ab2ef..8067387a7aaa9e5497366ca3792f0efb1ffd45a7 100644
--- a/src/module/qt_window/mpvwidget_interface.cpp
+++ b/src/module/qt_window/mpvwidget_interface.cpp
@@ -1,5 +1,5 @@
 #include "mpvwidget_interface.h"
-#include "mpvwidget.hh"
+#include "mainwindow.hh"
 
 #include <QApplication>
 
@@ -12,8 +12,7 @@ ___create_mpv_widget(struct poller_thread_arg *arg){
     int argc = 0;
     QApplication a(argc, NULL);
     setlocale(LC_NUMERIC, "C");
-    qt_window->mpv_widget = new MpvWidget(qt_window->queue, qt_window->db);
-    qt_window->mpv_widget->show();
+    qt_window->main_window = new MainWindow(qt_window);
     a.exec();
     return NULL;
 }