diff --git a/src/database/find.c b/src/database/find.c
index 92889c0de0be8330f54d3618b3289f6c425f6315..bcafb6ca3fa86b6af8173a2ed5a3ed42b71e7912 100644
--- a/src/database/find.c
+++ b/src/database/find.c
@@ -57,17 +57,17 @@ database_search_playlist_init(volatile sqlite3 *db, struct lkt_search *ret)
         " JOIN playlist ON playlist.id = playlist_id"
         "               AND playlist.name COLLATE nocase = ?"
         " JOIN kara ON kara.id = kara_id"
-        "           AND %s LIKE ?)"
-        "SELECT id, string, (SELECT MAX(len) FROM content)"
+        "           AND %s LIKE ?) "
+        "SELECT id, string, (SELECT MAX(len) FROM content) "
         "FROM content LIMIT %d OFFSET %d;";
     static const char *SQL =
         "WITH content AS ("
-        " SELECT kara.id AS id, string LENGTH(CAST(kara.id AS TEXT)) AS len"
+        " SELECT kara.id AS id, string, LENGTH(CAST(kara.id AS TEXT)) AS len"
         " FROM kara_playlist"
         " JOIN playlist ON playlist.id = playlist_id"
         "               AND playlist.name COLLATE NOCASE = ?"
-        " JOIN kara ON kara.id = kara_id)"
-        "SELECT id, string (SELECT MAX(len) FROM content)"
+        " JOIN kara ON kara.id = kara_id) "
+        "SELECT id, string, (SELECT MAX(len) FROM content) "
         "FROM content LIMIT %d OFFSET %d;";
 
     /* Common part */
@@ -78,6 +78,7 @@ database_search_playlist_init(volatile sqlite3 *db, struct lkt_search *ret)
         goto uri_is_null;
 
     /* Filter with an uri */
+    LOG_INFO("DB", "List plt '%s' with non null uri", ret->plt_name);
     safe_snprintf(SQL_STMT, LKT_MAX_SQLITE_STATEMENT, SQL_TEMPLATE,
                   ret->ka_uri.column_name, ret->msg_count, ret->continuation);
     SQLITE_PREPARE(db, ret->stmt, SQL_STMT, error);
@@ -93,6 +94,7 @@ database_search_playlist_init(volatile sqlite3 *db, struct lkt_search *ret)
 
     /* Don't filter */
 uri_is_null:
+    LOG_INFO("DB", "List plt '%s' with null uri", ret->plt_name);
     safe_snprintf(SQL_STMT, LKT_MAX_SQLITE_STATEMENT, SQL, ret->msg_count, ret->continuation);
     SQLITE_PREPARE(db, ret->stmt, SQL_STMT, error);
     SQLITE_BIND_TEXT(db, ret->stmt, 1, ret->plt_name, error);
@@ -107,15 +109,17 @@ error:
 bool
 database_search_listplaylist_init(volatile sqlite3 *db, struct lkt_search *ret)
 {
+    bool code_ret = false;
     static const char *SQL = "SELECT name FROM playlist LIMIT %d OFFSET %d;";
     char SQL_STMT[LKT_MAX_SQLITE_STATEMENT];
     safe_snprintf(SQL_STMT, LKT_MAX_SQLITE_STATEMENT, SQL, ret->msg_count, ret->continuation);
     ret->type   = lkt_search_listplaylist;
     ret->db     = db;
     SQLITE_PREPARE(db, ret->stmt, SQL_STMT, error);
+    code_ret = true;
 error:
     sqlite3_finalize(ret->stmt);
-    return false;
+    return code_ret;
 }
 
 bool
diff --git a/src/database/open.c b/src/database/open.c
index f82bbc7bef7ab111aaf349ae4400f4b6ae04a151..8a2701acdf4f1ffaf657375f6e89821986dd4f21 100644
--- a/src/database/open.c
+++ b/src/database/open.c
@@ -12,6 +12,12 @@
 extern unsigned char ___src_database_disk_sql[];
 extern unsigned char ___src_database_memory_sql[];
 
+static const char *__pragmas =
+    "PRAGMA case_sensitive_like = false;\n"
+    "PRAGMA encoding            = 'UTF-8';\n"
+    "PRAGMA synchronous         = 0;\n"
+    "PRAGMA journal_mode        = off;\n";
+
 #define INVALID_CHARS_DBPATH    ":?!'\""
 #define HEAP_LIMIT_SOFT         100 * 1024 * 1024
 #define HEAP_LIMIT_HARD         150 * 1024 * 1024
@@ -91,6 +97,7 @@ is_sql_str_invalid(const char *str)
 bool
 database_new(volatile sqlite3 **db)
 {
+    *db = NULL;
     static int flags = SQLITE_OPEN_READWRITE    |
                        SQLITE_OPEN_SHAREDCACHE  |
                        SQLITE_OPEN_NOFOLLOW     |
@@ -101,10 +108,15 @@ database_new(volatile sqlite3 **db)
         SQLITE_OK != sqlite3_open_v2(":memory:", (sqlite3 **) db, flags, NULL))
         return false;
     SQLITE_EXEC(*db, (const char *) ___src_database_memory_sql, err_not_init);
+    SQLITE_EXEC(*db, __pragmas, err_pragma);
     return true;
 err_not_init:
     *db = NULL;
     return false;
+err_pragma:
+    sqlite3_close((sqlite3 *) *db);
+    *db = NULL;
+    return false;
 }
 
 static inline bool
diff --git a/src/main/lkt.c b/src/main/lkt.c
index f4ca94c64698d09dd8ddb6195ef6c1442bf418f9..ce715f6108672d1ff340f2539a6aa2595c8ff3c0 100644
--- a/src/main/lkt.c
+++ b/src/main/lkt.c
@@ -130,12 +130,12 @@ write_socket(FILE *sock, const char *format, ...)
     buff[LKT_MESSAGE_MAX - 1] = 0;
 
     if (size < 0)
-        fail("Connexion error")
+        fail("Connexion error");
 
-        if (fwrite(buff, sizeof(char), size, sock) < (unsigned int) size)
-            fail("Connexion error")
+    if (fwrite(buff, sizeof(char), size, sock) < (unsigned int) size)
+        fail("Connexion error");
 
-            va_end(ap);
+    va_end(ap);
 }
 
 noreturn static inline void
@@ -851,15 +851,17 @@ redo:
 noreturn void
 list_plt__(struct lkt_cmd_args *args)
 {
-    fail_if(args->argc != 1, "Invalid argument number");
-    __continuation_calls("listplaylist");
+    fail_if(args->argc != 0, "Invalid argument number");
+    __continuation_calls("listplaylists");
 }
 
 noreturn void
 list_plt_content__(struct lkt_cmd_args *args)
 {
-    fail_if(args->argc != 0, "Invalid argument number");
-    __continuation_calls("listplaylists");
+    fail_if(args->argc != 1, "Invalid argument number");
+    char buff[LKT_MESSAGE_MAX];
+    safe_snprintf(buff, LKT_MESSAGE_MAX, "listplaylist %s", args->argv[0]);
+    __continuation_calls(buff);
     exit(EXIT_FAILURE);
 }
 
@@ -988,6 +990,7 @@ static struct lkt_cmd_opt options_plt[] = {
     { .name = "delete",     .call = plt_delete__  },
     { .name = "destroy",    .call = plt_destroy__ },
     { .name = "create",     .call = plt_create__  },
+    { .name = "list",       .call = search_plt__  },
     LKT_OPT_NULL,
 };