diff --git a/src/module/module_sdl2.c b/src/module/module_sdl2.c
index 4faaf76596f45a0c7b588530bec46fc7f7551df4..86ab4281d1832c690c466f37dff7d17ae3df1da8 100644
--- a/src/module/module_sdl2.c
+++ b/src/module/module_sdl2.c
@@ -108,6 +108,8 @@ sdl_thread__(struct poller_thread_arg *arg)
     SDL_Event event;
     uint64_t flags;
     int w, h, redraw = 0;
+    bool ctrl = false;
+    const Uint8 *state;
     free(arg);
 
     /* Init the SDL window
@@ -172,24 +174,35 @@ loop:
         }
         break;
 
+    case SDL_KEYDOWN:
+        if (event.key.keysym.sym == SDLK_LEFT) {
+            const char *cmd_seek[] = { "seek", "-5", "relative", NULL };
+            mpv_command_async((mpv_handle *) sdl2->mpv, 0, cmd_seek);
+        } else if (event.key.keysym.sym == SDLK_RIGHT) {
+            const char *cmd_seek[] = { "seek", "+5", "relative", NULL };
+            mpv_command_async((mpv_handle *) sdl2->mpv, 0, cmd_seek);
+        }
+        break;
+
     case SDL_KEYUP:
-        if (event.key.keysym.sym == SDLK_SPACE) {
+        state = SDL_GetKeyboardState(NULL);
+        ctrl = state[SDL_SCANCODE_LCTRL] || state[SDL_SCANCODE_RCTRL];
+
+        if (ctrl && event.key.keysym.sym == SDLK_SPACE) {
             const char *cmd_pause[] = { "cycle", "pause", NULL };
             mpv_command_async((mpv_handle *) sdl2->mpv, 0, cmd_pause);
         }
 
-        else if (event.key.keysym.sym == SDLK_RETURN    ||
-                 event.key.keysym.sym == SDLK_RETURN2   ||
-                 event.key.keysym.sym == SDLK_KP_ENTER)
+        else if (event.key.keysym.sym == SDLK_n && ctrl)
             lkt_queue_send(sdl2->queue, lkt_event_play_next, NULL);
 
-        else if (event.key.keysym.sym == SDLK_LEFT) {
-            const char *cmd_seek[] = { "seek", "-5", "relative", NULL };
-            mpv_command_async((mpv_handle *) sdl2->mpv, 0, cmd_seek);
-        } else if (event.key.keysym.sym == SDLK_RIGHT) {
-            const char *cmd_seek[] = { "seek", "+5", "relative", NULL };
-            mpv_command_async((mpv_handle *) sdl2->mpv, 0, cmd_seek);
-        }
+        else if (event.key.keysym.sym == SDLK_p && ctrl)
+            lkt_queue_send(sdl2->queue, lkt_event_play_prev, NULL);
+
+        else if ((event.key.keysym.sym == SDLK_RETURN    ||
+                  event.key.keysym.sym == SDLK_RETURN2   ||
+                  event.key.keysym.sym == SDLK_KP_ENTER) && ctrl)
+            lkt_queue_send(sdl2->queue, lkt_event_play_next, NULL);
 
         else if (event.key.keysym.sym == SDLK_F11) {
             if (sdl2->is_fullscreen)
@@ -203,26 +216,6 @@ loop:
         break;
 
     case SDL_TEXTINPUT:
-        if (STR_MATCH(event.text.text, ">"))
-            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, "i")) {
-            /*
-            struct kara_metadata mdt;
-            int id;
-            char *str;
-            if (database_queue_current_kara(sdl2->db, &mdt, &id)) {
-                mdtcat(&mdt, &str);
-                const char *cmd[] = { "show-text", str, "4000", NULL };
-                // Same size, only on 64bit arch...
-                // FIXME: Do something else in 32bits
-                mpv_command_async((mpv_handle *) sdl2->mpv,
-                                  (uint64_t) str, cmd);
-            }
-            */
-        } else
-            LOG_ERROR("WINDOW", "Not handled text '%s'", event.text.text);
         break;
 
     default: