diff --git a/src/commands.c b/src/commands.c
index 47155b92a623f776baa90e50e584d4ef494577c5..d2db41c8adccebea328565ec7007798edc2e0c18 100644
--- a/src/commands.c
+++ b/src/commands.c
@@ -33,7 +33,7 @@ command_restart(struct lkt_state *srv, size_t c)
     database_queue_state(srv->db, &sta);
     lkt_queue_free(&srv->queue);
     env_set(LKT_ENV_RESTART, "1");
-    int len = long_length(sta.current);
+    int len = long_length(LONG_MAX);
     if (len > 0) {
         char *pos = calloc(len, sizeof(char));
         if (pos) {
diff --git a/src/net/listen.c b/src/net/listen.c
index 6fe36067c32de8868976a456802720e6fa5ddb2e..04c4468243375b70f78c537f1f0f307360bde628 100644
--- a/src/net/listen.c
+++ b/src/net/listen.c
@@ -718,18 +718,21 @@ static inline void
 handle_queue_events(struct lkt_state *srv)
 {
     lkt_event evt;
-    char string[BUFFER_MAX];    /* TODO: A less dirty bomb */
+    char *string = calloc(BUFFER_MAX, sizeof(char));
+    if (!string)
+        return;
 redo:
     evt = lkt_queue_handle(&srv->queue);
 
     switch (evt.type) {
     case lkt_event_play_pos:
         safe_snprintf(string, BUFFER_MAX, "%ld", (size_t) evt.attr);
-        command_play(srv->db, &srv->win, (char **) &string, &srv->mpd_idle_events);
+        command_play(srv->db, &srv->win, &string, &srv->mpd_idle_events);
         break;
 
     case lkt_event_null:
     default:
+        free(string);
         return;
     }
     goto redo;