diff --git a/src/module/module_qt_window.c b/src/module/module_qt_window.c
index b542f099adddd9ce1e0b312a714e2e9a1fe0c70f..4eb1356553b68f2545afcd2992b02f9690e0a4da 100644
--- a/src/module/module_qt_window.c
+++ b/src/module/module_qt_window.c
@@ -62,6 +62,93 @@ mod_free(va_list *va)
     return 0;
 }
 
+static int
+mod_toggle_pause(va_list *va)
+{
+    va_list copy;
+    struct module_qt_window_s **win;
+    va_copy(copy, *va);
+    win      = (struct module_qt_window_s **)va_arg(copy, void **);
+    bool ret = ___module_qt_window_toggle_pause(*win);
+    va_end(copy);
+    return !ret;
+}
+
+static int
+mod_load_file(va_list *va)
+{
+    va_list copy;
+    struct module_qt_window_s **win;
+    va_copy(copy, *va);
+    win              = (struct module_qt_window_s **)va_arg(copy, void **);
+    const char *file = va_arg(copy, const char *);
+    const bool ret   = ___module_qt_window_load_file(*win, file);
+    va_end(copy);
+    return !ret;
+}
+
+static int
+mod_set_volume(va_list *va)
+{
+    va_list copy;
+    va_copy(copy, *va);
+    struct module_qt_window_s **win = (struct module_qt_window_s **)va_arg(copy, void **);
+    const int volume                = va_arg(copy, int);
+    const bool ret                  = ___module_qt_window_set_volume(*win, volume);
+    va_end(copy);
+    return !ret;
+}
+
+static int
+mod_set_paused(va_list *va)
+{
+    va_list copy;
+    va_copy(copy, *va);
+    struct module_qt_window_s **win = (struct module_qt_window_s **)va_arg(copy, void **);
+    const int state                 = va_arg(copy, int);
+    const bool ret                  = ___module_qt_window_set_paussed(*win, state);
+    va_end(copy);
+    return !ret;
+}
+
+static int
+mod_set_position(va_list *va)
+{
+    va_list copy;
+    va_copy(copy, *va);
+    struct module_qt_window_s **win = (struct module_qt_window_s **)va_arg(copy, void **);
+    const int seconds               = va_arg(copy, int);
+    const bool ret                  = ___module_qt_window_set_position(*win, seconds);
+    va_end(copy);
+    return !ret;
+}
+
+static int
+mod_get_duration(va_list *va)
+{
+    va_list copy;
+    struct module_qt_window_s **win;
+    va_copy(copy, *va);
+    win           = (struct module_qt_window_s **)va_arg(copy, void **);
+    int *duration = va_arg(copy, int *);
+    bool ret      = ___module_qt_window_get_duration(*win, duration);
+    va_end(copy);
+    return !ret;
+}
+
+static int
+mod_get_elapsed(va_list *va)
+{
+    va_list copy;
+    struct module_qt_window_s **win;
+    va_copy(copy, *va);
+    win            = (struct module_qt_window_s **)va_arg(copy, void **);
+    int *elapsed   = va_arg(copy, int *);
+    const bool ret = ___module_qt_window_get_elapsed(*win, elapsed);
+    va_end(copy);
+    return !ret;
+}
+
 /********************
  * The module stuff *
  ********************/
@@ -70,6 +157,13 @@ REG_BEGIN(qt_window_reg)
 REG_ADD_NAMED("new", mod_new)
 REG_ADD_NAMED("free", mod_free)
 REG_ADD_NAMED("close", mod_close)
+REG_ADD_NAMED("toggle", mod_toggle_pause)
+REG_ADD_NAMED("load", mod_load_file)
+REG_ADD_NAMED("set_paused", mod_set_paused)
+REG_ADD_NAMED("set_position", mod_set_position)
+REG_ADD_NAMED("set_volume", mod_set_volume)
+REG_ADD_NAMED("get_duration", mod_get_duration)
+REG_ADD_NAMED("get_elapsed", mod_get_elapsed)
 REG_END()
 #if !defined(LKT_STATIC_MODULE)
 REG_EXPORT(qt_window_reg)
diff --git a/src/module/mpv.h b/src/module/mpv.h
index cac89ac8e0f8fb25f057f69b17a09b4abb18a271..438986eea0079d6a4e8dd7573daf5fa040c76eed 100644
--- a/src/module/mpv.h
+++ b/src/module/mpv.h
@@ -1,5 +1,9 @@
 #pragma once
 
+#if defined( __cplusplus)
+extern "C" {
+#endif
+
 #include <mpv/client.h>
 #include <lektor/common.h>
 #include <lektor/queue.h>
@@ -34,3 +38,7 @@ enum {
 
 #define SET_STATE_FLAG(sta, STATUS) \
     (LOG_DEBUG("WINDOW", "Set status flag to " #STATUS), (sta) = STATE_##STATUS)
+
+#if defined(__cplusplus)
+}
+#endif
diff --git a/src/module/qt_window/mpvwidget.cpp b/src/module/qt_window/mpvwidget.cpp
index 201bfa3dc117ff6b7f5c1bbdb2019956369470c5..64c89e590e3f35c63d56aed0b2144ce5915e68fb 100644
--- a/src/module/qt_window/mpvwidget.cpp
+++ b/src/module/qt_window/mpvwidget.cpp
@@ -5,6 +5,7 @@
 #include <QtCore/QMetaObject>
 
 #include "qthelper.cpp"
+#include "../mpv.h"
 
 static void wakeup(void *ctx)
 {
@@ -158,3 +159,60 @@ void MpvWidget::on_update(void *ctx)
 {
     QMetaObject::invokeMethod((MpvWidget*)ctx, "maybeUpdate");
 }
+
+bool
+MpvWidget::get_elapsed(int * elapsed_sec)
+{
+    (void)elapsed_sec;
+    return true;
+}
+
+bool
+MpvWidget::get_duration(int * dur_sec)
+{
+    (void)dur_sec;
+    return true;
+}
+
+bool
+MpvWidget::set_paussed(int paused)
+{
+    (void)paused;
+    return true;
+}
+
+bool
+MpvWidget::set_volume(int vol)
+{
+    (void)vol;
+    return true;
+}
+
+bool
+MpvWidget::set_position(int sec)
+{
+    (void)sec;
+    return true;
+}
+
+bool
+MpvWidget::load_file(const char * filepath)
+{
+    const bool ret    = !lmpv_load_file(mpv, filepath);
+
+    if (ret) {
+        LOG_DEBUG("WINDOW", "Loaded file: %s", filepath);
+        //set_window_title(win);
+    } else {
+        LOG_ERROR("WINDOW", "Failed to load kara with path: %s", filepath);
+    }
+
+    //LOG_DEBUG("WINDOW", "Hinib flag at %d", win->hinib);
+    return ret;
+}
+
+bool
+MpvWidget::toggle_pause()
+{
+    return true;
+}
diff --git a/src/module/qt_window/mpvwidget.hh b/src/module/qt_window/mpvwidget.hh
index 92b2ab99189b2af7171fd34af797bf6a7da830f9..0c0f91d6fa1fea76321d8b0abcc5460cfa92e39d 100644
--- a/src/module/qt_window/mpvwidget.hh
+++ b/src/module/qt_window/mpvwidget.hh
@@ -39,6 +39,15 @@ public:
 private:
     struct queue *m_queue;
     lkt_db *m_db;
+
+public:
+    bool get_elapsed(int *);
+    bool get_duration(int *);
+    bool set_paussed(int);
+    bool set_volume(int);
+    bool set_position(int);
+    bool load_file(const char *);
+    bool toggle_pause();
 };
 
 #endif // __LKT_MODULE_QT_WINDOW__
diff --git a/src/module/qt_window/mpvwidget_interface.cpp b/src/module/qt_window/mpvwidget_interface.cpp
index a257c610cb3f6e2b293758daf757b587cc6d2639..56c9af81043859c5129ed8e303006722f83ab2ef 100644
--- a/src/module/qt_window/mpvwidget_interface.cpp
+++ b/src/module/qt_window/mpvwidget_interface.cpp
@@ -17,3 +17,45 @@ ___create_mpv_widget(struct poller_thread_arg *arg){
     a.exec();
     return NULL;
 }
+
+bool
+___module_qt_window_get_elapsed(struct module_qt_window_s * win, int * elapsed_sec)
+{
+    return win->mpv_widget->get_elapsed(elapsed_sec);
+}
+
+bool
+___module_qt_window_get_duration(struct module_qt_window_s * win, int * dur_sec)
+{
+    return win->mpv_widget->get_duration(dur_sec);
+}
+
+bool
+___module_qt_window_set_paussed(struct module_qt_window_s * win, int paused)
+{
+    return win->mpv_widget->set_paussed(paused);
+}
+
+bool
+___module_qt_window_set_volume(struct module_qt_window_s * win, int vol)
+{
+    return win->mpv_widget->set_volume(vol);
+}
+
+bool
+___module_qt_window_set_position(struct module_qt_window_s * win, int sec)
+{
+    return win->mpv_widget->set_position(sec);
+}
+
+bool
+___module_qt_window_load_file(struct module_qt_window_s * win, const char * filepath)
+{
+    return win->mpv_widget->load_file(filepath);
+}
+
+bool
+___module_qt_window_toggle_pause(struct module_qt_window_s * win)
+{
+    return win->mpv_widget->toggle_pause();
+}
diff --git a/src/module/qt_window/mpvwidget_interface.h b/src/module/qt_window/mpvwidget_interface.h
index 2d85855ea88c16a6fdd68ff228bc8eb436028792..9964c70bc2db903d579517005d7f95123ab57d9f 100644
--- a/src/module/qt_window/mpvwidget_interface.h
+++ b/src/module/qt_window/mpvwidget_interface.h
@@ -10,6 +10,14 @@ extern "C" {
 
 void * ___create_mpv_widget(struct poller_thread_arg *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 *);
+bool ___module_qt_window_set_paussed(struct module_qt_window_s *, int);
+bool ___module_qt_window_set_volume(struct module_qt_window_s *, int);
+bool ___module_qt_window_set_position(struct module_qt_window_s *, int);
+bool ___module_qt_window_load_file(struct module_qt_window_s *, const char *);
+bool ___module_qt_window_toggle_pause(struct module_qt_window_s *);
+
 #if defined(__cplusplus)
 }
 #endif