diff --git a/src/base/commands.c b/src/base/commands.c
index de4469e22bb99410fe3a98ff1c56fef1fbdb8067..98c2ca2374204fe5512fee4603d0ccc1b17a6fd8 100644
--- a/src/base/commands.c
+++ b/src/base/commands.c
@@ -245,6 +245,7 @@ command_play(struct lkt_state *srv, char __attribute__((unused)) *args[LKT_MESSA
 {
     char *endptr, err;
     long pos = 1;
+    struct lkt_queue_state queue_state;
 
     /* Argument handle. */
     if (args[0]) {
@@ -252,6 +253,13 @@ command_play(struct lkt_state *srv, char __attribute__((unused)) *args[LKT_MESSA
         RETURN_IF(err, "STRTOL failed", false);
     }
 
+    /* If position is after the queue, don't do anything */
+    RETURN_UNLESS(database_queue_state(srv->db, &queue_state), "Can't get playback status", false);
+    if (queue_state.length <= pos) {
+        LOG_INFO("COMMAND", "Don't perform play command, queue is empty or position is after queue length");
+        return false;
+    }
+
     /* Do the actual job here. */
     database_queue_stop(srv->db);
     RETURN_IF(MOD_CALL(srv->window_mod, "new", &srv->queue, srv->db), "Can't create window", false);