diff --git a/src/commands.c b/src/commands.c
index 495e0c195398ee6399ec27cef7f947382e617704..f248ff3c770d63976fc585f5271963fe0bfe3c49 100644
--- a/src/commands.c
+++ b/src/commands.c
@@ -777,8 +777,8 @@ command_sticker_get(struct lkt_state *srv, size_t c, char *argv[LKT_MESSAGE_ARGS
     /* Simple list {type} {uri} command */
     if (argv[0] != NULL && argv[1] != NULL && argv[2] == NULL) {
         callback.st_uri = atoi(argv[1]);
-        if (database_search_sticker_init(srv->db, &callback))
-            goto iter;
+        if (!database_search_sticker_init(srv->db, &callback))
+            return false;
     }
 
     /* list {type} {uri} {name} command */
@@ -786,8 +786,8 @@ command_sticker_get(struct lkt_state *srv, size_t c, char *argv[LKT_MESSAGE_ARGS
              argv[2] != NULL && argv[3] == NULL) {
         callback.name = argv[2];
         callback.st_uri = atoi(argv[1]);
-        if (database_search_sticker_init(srv->db, &callback))
-            goto iter;
+        if (!database_search_sticker_init(srv->db, &callback))
+            return false;
     }
 
     /* list {type} {uri} {name} `op` {value} command */
@@ -798,20 +798,20 @@ command_sticker_get(struct lkt_state *srv, size_t c, char *argv[LKT_MESSAGE_ARGS
         callback.st_uri = atoi(argv[1]);
         callback.st_op = argv[3][0];
         callback.st_value = atoi(argv[4]);
-        if (database_search_sticker_init(srv->db, &callback))
-            goto iter;
+        if (!database_search_sticker_init(srv->db, &callback))
+            return false;
     }
 
     /* Just list all stickers */
     else if ( (argv[0] != NULL && argv[1] == NULL) || argv[0] == NULL ) {
-        if (database_search_sticker_init(srv->db, &callback))
-            goto iter;
+        if (!database_search_sticker_init(srv->db, &callback))
+            return false;
     }
 
     else
         goto unknown;
 
-iter:
+    /* Send results */
     while (database_search_iter(&callback))
         continue;
     return true;
@@ -825,8 +825,16 @@ bool
 command_sticker_delete(struct lkt_state *srv, size_t c, char *argv[LKT_MESSAGE_ARGS_MAX])
 {
     UNUSED(c);
-    RETURN_UNLESS(argv[0] && argv[1], "Invalid argument", false);
+    RETURN_UNLESS(argv[0] && argv[1] && argv[2], "Invalid argument", false);
     int uri = atoi(argv[1]);
     srv->mpd_idle_events |= MPD_IDLE_STICKER;
     return database_sticker_delete_specify(srv->db, argv[0], uri, argv[2]);
 }
+
+bool
+command_sticker_destroy(struct lkt_state *srv, size_t c, char *argv[LKT_MESSAGE_ARGS_MAX])
+{
+    UNUSED(c);
+    RETURN_UNLESS(argv[0], "Invalid argument", false);
+    return database_sticker_delete(srv->db, argv[0]);
+}
diff --git a/src/main/lkt.c b/src/main/lkt.c
index 79c8959000f1a25c841f649f1c3783330185a3ec..2618b4e0fa86d0bd3fa16e62d8809794cdd6250a 100644
--- a/src/main/lkt.c
+++ b/src/main/lkt.c
@@ -170,6 +170,20 @@ send_cmd_with_uri(FILE *sock, char *cmd, int argc, const char **argv)
 
 /* Functions implementing options. */
 
+#define just_send_one_arg(func, cmd)                \
+noreturn void func (struct lkt_cmd_args *args) {    \
+    fail_if(args->argc != 1, "Invalid argument");   \
+    FILE *sock = lkt_connect();                     \
+    char buff[2];                                   \
+    write_socket(sock, cmd " %s\n", args->argv[0]); \
+    exit_with_status(sock, buff);                   \
+}
+just_send_one_arg(stickers_create__, "sticker __create")
+just_send_one_arg(stickers_destroy__, "sticker __destroy")
+just_send_one_arg(plt_destroy__, "rm")
+just_send_one_arg(plt_create__, "playlistadd")
+#undef just_send_one_arg
+
 #define just_send(func, msg) /* Just send a simple string functions */  \
     noreturn void func (struct lkt_cmd_args *args) {                    \
         fail_if(args->argc, "This command takes no arguments");         \
@@ -188,9 +202,11 @@ simple_send_with_password__(const char *cmd)
 {
     if (!password)
         fail("Password not provided");
-    static const char cmd__[] = "password %s\n%s\n";
     FILE *sock = lkt_connect();
-    write_socket(sock, cmd__, password, cmd);
+    write_socket(sock, "command_list_begin\n");
+    write_socket(sock, "password %s\n", password);
+    write_socket(sock, "%s\n", cmd);
+    write_socket(sock, "command_list_end\n");
     exit(EXIT_SUCCESS);
 }
 
@@ -220,15 +236,22 @@ rescan_or_update__(struct lkt_cmd_args *args, const char *cmd)
     int i;
 
     /* All the db */
-    if (args->argc == 0)
-        write_socket(sock, "password %s\n%s\n", password, cmd);
+    if (args->argc == 0) {
+        write_socket(sock, "command_list_begin\n");
+        write_socket(sock, "password %s\n", password);
+        write_socket(sock, "%s\n", cmd);
+        write_socket(sock, "command_list_end\n");
+    }
 
     /* With a query */
     else {
         memset(buff, 0, LKT_MESSAGE_MAX * sizeof(char));
         for (i = 0; i < args->argc; ++i)
             strncat(buff, args->argv[i], LKT_MESSAGE_MAX - 1);
-        write_socket(sock, "password %s\n%s %s\n", password, cmd, buff);
+        write_socket(sock, "command_list_begin\n");
+        write_socket(sock, "password %s\n", password);
+        write_socket(sock, "%s %s\n", cmd, buff);
+        write_socket(sock, "command_list_end\n");
     }
 
     exit(EXIT_SUCCESS);
@@ -670,27 +693,6 @@ plt_delete__(struct lkt_cmd_args *args)
     exit_with_status(sock, buff);
 }
 
-noreturn void
-plt_destroy__(struct lkt_cmd_args *args)
-{
-    fail_if(args->argc != 1, "Invalid argument");
-    FILE *sock = lkt_connect();
-    char buff[2];
-    write_socket(sock, "rm %s\n", args->argv[0]);
-    exit_with_status(sock, buff);
-}
-
-noreturn void
-plt_create__(struct lkt_cmd_args *args)
-{
-    fail_if(args->argc != 1, "Invalid argument");
-
-    FILE *sock = lkt_connect();
-    char buff[2];
-    write_socket(sock, "playlistadd %s\n", args->argv[0]);
-    exit_with_status(sock, buff);
-}
-
 noreturn void
 stickers_get__(struct lkt_cmd_args *args)
 {
@@ -729,16 +731,6 @@ stickers_set__(struct lkt_cmd_args *args)
     exit_with_status(sock, buff);
 }
 
-noreturn void
-stickers_create__(struct lkt_cmd_args *args)
-{
-    fail_if(args->argc != 1, "Invalid argument");
-    FILE *sock = lkt_connect();
-    char buff[2];
-    write_socket(sock, "sticker __create %s\n", args->argv[0]);
-    exit_with_status(sock, buff);
-}
-
 noreturn void
 stickers_delete__(struct lkt_cmd_args *args)
 {
@@ -845,6 +837,7 @@ static struct lkt_cmd_opt options_stickers[] = {
     { .name = "set",        .call = stickers_set__      },
     { .name = "delete",     .call = stickers_delete__   },
     { .name = "create",     .call = stickers_create__   },
+    { .name = "destroy",    .call = stickers_destroy__  },
     LKT_OPT_NULL,
 };