diff --git a/inc/common/queue.h b/inc/common/queue.h
index 11820a63adc8fa42375ce60b54d7a210e95c0a84..0779f98eaa4db683325b41fe3ed635ca5e59e81e 100644
--- a/inc/common/queue.h
+++ b/inc/common/queue.h
@@ -28,8 +28,12 @@ enum lkt_event_type {
     lkt_event_skip_current  = (1 << 9), // NULL
 };
 
-#define lkt_event_play (lkt_event_play_pos | lkt_event_play_file |  \
-                        lkt_event_play_next | lkt_event_play_prev   \
+#define lkt_event_play ( lkt_event_play_pos | lkt_event_play_file |     \
+                         lkt_event_play_next | lkt_event_play_prev |    \
+                         lkt_event_play_toggle | lkt_event_skip_current \
+                       )
+#define lkt_event_prop ( lkt_event_prop_vol | lkt_event_prop_dur |      \
+                         lkt_event_prop_time                            \
                        )
 
 typedef struct {
diff --git a/src/main/server.c b/src/main/server.c
index 3527e199813af4434de05c104ebb17b06f29b8e7..33c81c6464c3eee60d9edc1db8fbf818a209ebfe 100644
--- a/src/main/server.c
+++ b/src/main/server.c
@@ -121,6 +121,7 @@ normal_launch:
     if (!env_get(LKT_ENV_RESTART) && autoclear)
         database_queue_clear(srv.db);
 
+    lkt_queue_make_available(&srv.queue, lkt_event_prop);
     RETURN_IF(load_module_by_name(&srv, "player", &srv.win),  "Can't load module player", 3);
     RETURN_IF(load_module_by_name(&srv, "repo",   &srv.repo), "Can't load module repo", 3);
 
diff --git a/src/module/module_sdl2.c b/src/module/module_sdl2.c
index 0f97929dee0bc6018bf30e5a08a0a5688a0cfaed..4faaf76596f45a0c7b588530bec46fc7f7551df4 100644
--- a/src/module/module_sdl2.c
+++ b/src/module/module_sdl2.c
@@ -166,7 +166,8 @@ loop:
 
     case SDL_WINDOWEVENT:
         if (event.window.event == SDL_WINDOWEVENT_EXPOSED) {
-            lkt_set_event_available(win->srv, lkt_event_play);
+            lkt_queue_make_available(&win->srv->queue, lkt_event_play);
+            lkt_queue_make_available(&win->srv->queue, lkt_event_prop);
             redraw = 1;
         }
         break;
@@ -206,10 +207,7 @@ loop:
             lkt_queue_send(sdl2->queue, lkt_event_play_next, NULL);
         else if (STR_MATCH(event.text.text, "<"))
             lkt_queue_send(sdl2->queue, lkt_event_play_prev, NULL);
-        else if (STR_MATCH(event.text.text, "o")) {
-            const char *cmd[] = { "show-progress", NULL };
-            mpv_command_async((mpv_handle *) sdl2->mpv, 0, cmd);
-        } else if (STR_MATCH(event.text.text, "i")) {
+        else if (STR_MATCH(event.text.text, "i")) {
             /*
             struct kara_metadata mdt;
             int id;
diff --git a/src/queue.c b/src/queue.c
index c872e1f43f88ef9e4e22b3ca97e58f37b616cd5e..af034c55401f8657836668db37c4a8f1700ce6f5 100644
--- a/src/queue.c
+++ b/src/queue.c
@@ -44,8 +44,7 @@ void
 lkt_queue_send(struct queue *queue, enum lkt_event_type _type, void *_attr)
 {
     pthread_mutex_lock(&queue->lock);
-    if (!queue)
-        goto end;
+    GOTO_UNLESS(queue, "Invalid argument", end)
 
     volatile lkt_event *new;
     if (queue->size == queue->last) {
@@ -63,6 +62,9 @@ lkt_queue_send(struct queue *queue, enum lkt_event_type _type, void *_attr)
         .attr = _attr,
     };
     queue->contents[(queue->last)++] = evt;
+
+    if (! (_type & queue->available))
+        LOG_WARN("QUEUE", "The event %d is not available, push it anyway", _type);
 end:
     pthread_mutex_unlock(&queue->lock);
 }
@@ -72,13 +74,17 @@ lkt_queue_handle(struct queue *queue)
 {
     pthread_mutex_lock(&queue->lock);
     lkt_event ret = {0};
-
-    if (!queue || !queue->last ||
-        !(queue->contents[0].type & queue->available))
+    if (!queue || !queue->last)
         goto end;
+    if (! (queue->contents[0].type & queue->available) &&
+        queue->contents[0].type) {
+        LOG_WARN("QUEUE", "Event %d is not available", queue->contents[0].type);
+        goto end;
+    }
 
     ret = queue->contents[0];
-    memmove((void *) queue->contents, (void *) (queue->contents + 1), --(queue->last));
+    memmove((void *) queue->contents, (void *) (queue->contents + 1),
+            --(queue->last));
 end:
     pthread_mutex_unlock(&queue->lock);
     return ret;