diff --git a/inc/common/queue.h b/inc/common/queue.h
index b4a4b67776e8af85e8f8b1604156421c5077dfb7..11820a63adc8fa42375ce60b54d7a210e95c0a84 100644
--- a/inc/common/queue.h
+++ b/inc/common/queue.h
@@ -3,15 +3,22 @@
 #include <pthread.h>
 #include <common/common.h>
 
-#define LKT_PLAY_STOP   ((void *) (size_t) 0)
-#define LKT_PLAY_PLAY   ((void *) (size_t) 1)
-#define LKT_PLAY_PAUSE  ((void *) (size_t) 2)
-#define LKT_PLAY_TOGGLE ((void *) (size_t) 3)
+enum {
+    _LKT_PLAY_STOP   = 0,
+    _LKT_PLAY_PLAY   = 1,
+    _LKT_PLAY_PAUSE  = 2,
+    _LKT_PLAY_TOGGLE = 3,
+};
+
+#define LKT_PLAY_STOP   ((void *) (size_t) _LKT_PLAY_STOP)
+#define LKT_PLAY_PLAY   ((void *) (size_t) _LKT_PLAY_PLAY)
+#define LKT_PLAY_PAUSE  ((void *) (size_t) _LKT_PLAY_PAUSE)
+#define LKT_PLAY_TOGGLE ((void *) (size_t) _LKT_PLAY_TOGGLE)
 
 enum lkt_event_type {
     lkt_event_null          = 0,        // NULL
     lkt_event_play_pos      = (1 << 1), // size_t
-    lkt_event_play_file     = (1 << 2), // const char*
+    lkt_event_play_file     = (1 << 2), // XXX: UNUSED //
     lkt_event_play_next     = (1 << 3), // NULL
     lkt_event_play_prev     = (1 << 4), // NULL
     lkt_event_play_toggle   = (1 << 5), // size_t, `LKT_PLAY_.*`
diff --git a/src/module/mpv.c b/src/module/mpv.c
index 919b09d9e022203ab43abfbbf5453337bff3615c..eb0b901484c0956859f55e8c443a663fe1998405 100644
--- a/src/module/mpv.c
+++ b/src/module/mpv.c
@@ -151,8 +151,8 @@ lmpv_toggle_pause(mpv_handle *ctx)
 
 int
 lmpv_handle(struct lkt_win *win, mpv_handle *ctx, struct queue *queue,
-           volatile int *time_pos, volatile int *time_duration,
-           volatile int *state)
+            volatile int *time_pos, volatile int *time_duration,
+            volatile int *state)
 {
     size_t ao_volume;
     mpv_event *event = NULL;
diff --git a/src/net/listen.c b/src/net/listen.c
index 59ffd99c68c90ee7726d4c9a059d7b7be1301da8..fa05cfe7a0d1a275ead32fcdbd1e5c66f4aba598 100644
--- a/src/net/listen.c
+++ b/src/net/listen.c
@@ -726,21 +726,62 @@ static inline void
 handle_queue_events(struct lkt_state *srv)
 {
     lkt_event evt;
-    char *string = malloc(BUFFER_MAX * sizeof(char));
-    if (!string)
-        return;
+    char *string = NULL;
 redo:
     evt = lkt_queue_handle(&srv->queue);
 
     switch (evt.type) {
     case lkt_event_play_pos:
+        if (NULL == (string = malloc(BUFFER_MAX * sizeof(char))))
+            return;
         safe_snprintf(string, BUFFER_MAX, "%ld", (size_t) evt.attr);
         command_play(srv->db, &srv->win, &string, &srv->mpd_idle_events);
+        free(string);
+        break;
+
+    case lkt_event_play_next:
+        command_next(srv->db, &srv->win, &srv->mpd_idle_events);
+        break;
+
+    case lkt_event_play_prev:
+        command_previous(srv->db, &srv->win, &srv->mpd_idle_events);
+        break;
+
+    case lkt_event_play_toggle:
+        switch ((size_t) evt.attr) {
+        case _LKT_PLAY_PAUSE:
+        case _LKT_PLAY_PLAY:
+        case _LKT_PLAY_TOGGLE:
+            database_queue_toggle_pause(srv->db);
+            break;
+        case _LKT_PLAY_STOP:
+            database_queue_stop(srv->db);
+            break;
+        }
+        break;
+
+    case lkt_event_prop_vol:
+        database_config_queue(srv->db, "volume", (size_t) evt.attr);
+        break;
+
+    case lkt_event_prop_dur:
+        database_config_queue(srv->db, "duration", (size_t) evt.attr);
+        break;
+
+    case lkt_event_prop_time:
+        database_config_queue(srv->db, "elapsed", (size_t) evt.attr);
+        break;
+
+    case lkt_event_skip_current:
+        if (NULL == (string = malloc(PATH_MAX * sizeof(char))))
+            return;
+        database_queue_skip_current(srv->db, string);
+        srv->win.load_file(&srv->win, string);
+        free(string);
         break;
 
     case lkt_event_null:
     default:
-        free(string);
         return;
     }
     goto redo;