diff --git a/inc/lektor/internal/os.h b/inc/lektor/internal/os.h
index 676bbccfee8e6231b26d915aa0131e7212f1ab49..823b28325ad0f6fc44f6957e7381c9125b6e9cda 100644
--- a/inc/lektor/internal/os.h
+++ b/inc/lektor/internal/os.h
@@ -87,7 +87,7 @@ typedef void (*function_ptr)(void);
 #endif
 
 /* Set the name of a thread, OS specific */
-void lkt_thread_set_name(const char name[16]);
+void lkt_thread_set_name(const char *name);
 
 /* Get the path to the currently executing binary */
 int lkt_read_self_exe(char *path, size_t len);
diff --git a/src/base/commands.c b/src/base/commands.c
index a520b1a722baaf3585e43befcbd05079e2d7fb3e..9de3090658bef25959ac42d13343e344e7df8f25 100644
--- a/src/base/commands.c
+++ b/src/base/commands.c
@@ -723,7 +723,7 @@ command_plt_ctx(struct lkt_state *srv, size_t c, char *args[LKT_MESSAGE_ARGS_MAX
 
 bool
 command_set_playback_option(struct lkt_state *srv, size_t UNUSED c, LKT_PLAYBACK_OPTION opt,
-                            char *args[LKT_MESSAGE_MAX])
+                            char *args[LKT_MESSAGE_ARGS_MAX])
 {
     RETURN_UNLESS(srv, "Invalid argument", false);
     long val;
diff --git a/src/base/os.c b/src/base/os.c
index d332b9543032666e7e75a747ce816e2bf56da107..e72407c3dc89a25cf72fa58199a3998081abd659 100644
--- a/src/base/os.c
+++ b/src/base/os.c
@@ -20,8 +20,13 @@ lkt_read_self_exe(char *path, size_t len)
 }
 
 void
-lkt_thread_set_name(const char name[16])
+lkt_thread_set_name(const char *name)
 {
+    const size_t len = strlen(name);
+    if (len >= 16) {
+        LOG_FATAL("The name should at least be a 15 character string! Here the length is %zu", len);
+    }
+
 #if defined(__linux__)
     pthread_t tid = pthread_self();
     LOG_INFO("OS", "Set name to '%s' for thread %ld", name, tid);
diff --git a/src/database/queue.c b/src/database/queue.c
index 5d80602b08f8725ce0329b45b81e4074cfcef2e0..9e20c08c1ad44c5751e18b84e1e3e63a71f4513c 100644
--- a/src/database/queue.c
+++ b/src/database/queue.c
@@ -461,7 +461,7 @@ database_queue_next(lkt_db *db, char filepath[PATH_MAX])
         safe_snprintf(SQL_UPDATE, LKT_MAX_SQLITE_STATEMENT, "UPDATE queue_state SET current = %d;", id);
 
         if (filepath != NULL)
-            strncpy(filepath, sqlite3_column_chars(stmt, 0), PATH_MAX);
+            strncpy(filepath, sqlite3_column_chars(stmt, 0), PATH_MAX - 1);
         else {
             LOG_ERROR("DB", "Failed to get file, id was %d", id);
             goto error;
@@ -522,7 +522,7 @@ database_queue_prev(lkt_db *db, char filepath[PATH_MAX])
         safe_snprintf(SQL_UPDATE, LKT_MAX_SQLITE_STATEMENT, "UPDATE queue_state SET current = %d;", id);
 
         if (filepath != NULL)
-            strncpy(filepath, sqlite3_column_chars(stmt, 0), PATH_MAX);
+            strncpy(filepath, sqlite3_column_chars(stmt, 0), PATH_MAX - 1);
         else {
             LOG_ERROR("DB", "Failed to get file, position was %d", id);
             goto error;
diff --git a/src/net/listen.c b/src/net/listen.c
index e8f6cdd120f546c14a371427b89bed126b80ff4b..aabd69127be37a0410fea0372ee42b9fb5f362e5 100644
--- a/src/net/listen.c
+++ b/src/net/listen.c
@@ -999,6 +999,7 @@ handle_queue_events(struct lkt_state *srv)
 
     lkt_event evt;
     char *string = NULL;
+    char *arguments_to_pass[LKT_MESSAGE_ARGS_MAX];
 
 redo:
     evt = lkt_queue_handle(&srv->queue);
@@ -1007,7 +1008,9 @@ redo:
     __CASE(PLAY_POS, {
         string = LKT_ALLOC_ARRAY(char, BUFFER_MAX);
         safe_snprintf(string, BUFFER_MAX, "%ld", (size_t)evt.attr);
-        command_play(srv, &string);
+        arguments_to_pass[0] = string;
+        arguments_to_pass[1] = NULL;
+        command_play(srv, arguments_to_pass);
         free(string);
     })