diff --git a/inc/lektor/commands.h b/inc/lektor/commands.h
index ba3cb7af0435577c45810c65413a68aaa5db95e2..83bb70c999b210d044808683ecfbaeb49b9c7951 100644
--- a/inc/lektor/commands.h
+++ b/inc/lektor/commands.h
@@ -60,7 +60,7 @@ bool command_noidle(struct lkt_state *srv, size_t c);
 
 /* Find and send karas in the db that match the search expression */
 bool command_find(struct lkt_state *srv, size_t c, char *cmd_args[LKT_MESSAGE_ARGS_MAX], long continuation,
-                  bool (*init)(volatile sqlite3 *, char *, char *, struct lkt_search *));
+                  bool (*init)(volatile sqlite3 *, struct lkt_search *));
 
 /* Set options for the lektor such as `random`, `single`, `repeat`, etc */
 enum lkt_playback_option {
diff --git a/inc/lektor/database.h b/inc/lektor/database.h
index c6a399b88a301266cef52c3587bb381ee590dc1b..d50fa1d2b4e8bacf49a538201bf5872b8739fc9d 100644
--- a/inc/lektor/database.h
+++ b/inc/lektor/database.h
@@ -96,6 +96,9 @@ struct lkt_search {
     const char *name;       /* Stickers and playlists                       */
     int st_value;           /* The value of a sticker                       */
     int st_uri;             /* URI of a sticker                             */
+
+    char *ka_col_name;      /* Column name for karas                        */
+    char *ka_rgx;           /* Regex for the content of the selected column */
 };
 
 typedef bool (*lkt_search_init_add_func)(volatile sqlite3 *, struct lkt_uri *, int);
@@ -103,8 +106,8 @@ typedef bool (*lkt_search_database_func)(struct lkt_state *srv, size_t c, int id
 typedef bool (*lkt_search_queue_func)   (struct lkt_state *srv, size_t c, int id, int id_len, const char *row);
 typedef bool (*lkt_search_sticker_func) (struct lkt_state *srv, size_t c, const char *sticker, const char *type, int uri, int value);
 
-bool database_search_database_init(volatile sqlite3 *db, char *col_name, char *rgx,                               struct lkt_search *ret);
-bool database_search_queue_init   (volatile sqlite3 *db, char *col_name, char *rgx,                               struct lkt_search *ret);
+bool database_search_database_init(volatile sqlite3 *db, struct lkt_search *ret);
+bool database_search_queue_init   (volatile sqlite3 *db, struct lkt_search *ret);
 bool database_search_sticker_init (volatile sqlite3 *db, char *type,     char *name, int uri, char op, int value, struct lkt_search *ret);
 bool database_search_iter(struct lkt_search *item);
 
diff --git a/src/commands.c b/src/commands.c
index b92c2a106bd1a464bf46ed14e96fd2b91893ee0a..4db7b1d58eacf67704d2c5d0a472f821229ce1b4 100644
--- a/src/commands.c
+++ b/src/commands.c
@@ -396,9 +396,9 @@ lkt_callback_send_row_v2(struct lkt_state *srv, size_t c, int id, int id_len, co
 
 bool
 command_find(struct lkt_state *srv, size_t c, char *cmd_args[LKT_MESSAGE_ARGS_MAX], long continuation,
-             bool(*init)(volatile sqlite3 *, char *, char *, struct lkt_search *))
+             bool(*init)(volatile sqlite3 *, struct lkt_search *))
 {
-    char rgx[PATH_MAX], *col_name, *mpd_tag;
+    char rgx[PATH_MAX], *mpd_tag;
     int count;
     struct lkt_search search = {
         .srv = srv,
@@ -406,6 +406,7 @@ command_find(struct lkt_state *srv, size_t c, char *cmd_args[LKT_MESSAGE_ARGS_MA
         .continuation = continuation,
         .msg_count = lkt_remaining_msg(srv, c) - 3, /* Reserve slots for OK/ACK and continue: */
         .call = (void(*)(void)) lkt_callback_send_row_v2,
+        .ka_rgx = rgx,
     };
 
     /* Check args */
@@ -415,17 +416,17 @@ command_find(struct lkt_state *srv, size_t c, char *cmd_args[LKT_MESSAGE_ARGS_MA
     mpd_tag = cmd_args[0];
     if (!strcasecmp("any", mpd_tag) || !strcasecmp("all", mpd_tag) || !strcasecmp("query", mpd_tag) ||
         !strcasecmp("source", mpd_tag) || !strcasecmp("title", mpd_tag)) {
-        col_name = LKT_DATABASE_KARA_COLUMNT_ANY;
+        search.ka_col_name = LKT_DATABASE_KARA_COLUMNT_ANY;
     } else if (!strcasecmp("author", mpd_tag)) {
-        col_name = LKT_DATABASE_NAME_KAUTHOR;
+        search.ka_col_name = LKT_DATABASE_NAME_KAUTHOR;
     } else if (!strcasecmp("category", mpd_tag) || !strcasecmp("cat", mpd_tag)) {
-        col_name = LKT_DATABASE_NAME_KCAT;
+        search.ka_col_name = LKT_DATABASE_NAME_KCAT;
     } else if (!strcasecmp("type", mpd_tag)) {
-        col_name = LKT_DATABASE_NAME_KTYPE;
+        search.ka_col_name = LKT_DATABASE_NAME_KTYPE;
     } else if (!strcasecmp("language", mpd_tag) || !strcasecmp("lang", mpd_tag)) {
-        col_name = LKT_DATABASE_NAME_KLANG;
+        search.ka_col_name = LKT_DATABASE_NAME_KLANG;
     } else if (!strcasecmp("id", mpd_tag)) {
-        col_name = LKT_DATABASE_NAME_KID;
+        search.ka_col_name = LKT_DATABASE_NAME_KID;
     } else
         return false;
 
@@ -440,7 +441,7 @@ command_find(struct lkt_state *srv, size_t c, char *cmd_args[LKT_MESSAGE_ARGS_MA
     }
 
     /* Make the search langand do the right action */
-    RETURN_UNLESS(init(srv->db, col_name, rgx, &search), "Failed to init search", false);
+    RETURN_UNLESS(init(srv->db, &search), "Failed to init search", false);
 
     for (count = 0; database_search_iter(&search); ++count)
         continue;
diff --git a/src/database/find.c b/src/database/find.c
index 2d378348c93fddb45143ad77d8ac88d63a7a6cef..73e566369984c7dc9d02fafc71fe9abe62f57a5c 100644
--- a/src/database/find.c
+++ b/src/database/find.c
@@ -9,7 +9,7 @@
 #include <string.h>
 
 bool
-database_search_database_init(volatile sqlite3 *db, char *col_name, char *rgx, struct lkt_search *ret)
+database_search_database_init(volatile sqlite3 *db, struct lkt_search *ret)
 {
     RETURN_UNLESS(ret, "Exit because return pointer is NULL", false);
     static const char *SQL_STMT_TEMPLATE =
@@ -22,11 +22,11 @@ database_search_database_init(volatile sqlite3 *db, char *col_name, char *rgx, s
     ret->type = lkt_search_database;
 
     /* Search part */
-    snprintf(SQL_STMT, LKT_MAX_SQLITE_STATEMENT - 1, SQL_STMT_TEMPLATE, col_name,
+    snprintf(SQL_STMT, LKT_MAX_SQLITE_STATEMENT - 1, SQL_STMT_TEMPLATE, ret->ka_col_name,
              ret->msg_count, ret->continuation);
     SQL_STMT[LKT_MAX_SQLITE_STATEMENT - 1] = 0;
     SQLITE_PREPARE(db, ret->stmt, SQL_STMT, error);
-    SQLITE_BIND_TEXT(db, ret->stmt, 1, rgx, error);
+    SQLITE_BIND_TEXT(db, ret->stmt, 1, ret->ka_rgx, error);
     ret->db = db;
     return true;
 error:
@@ -72,7 +72,7 @@ error:
 }
 
 bool
-database_search_queue_init(volatile sqlite3 *db, char *col_name, char *rgx, struct lkt_search *ret)
+database_search_queue_init(volatile sqlite3 *db, struct lkt_search *ret)
 {
     RETURN_UNLESS(ret, "Exit because return pointer is NULL", false);
     static const char *SQL_STMT_TEMPLATE =
@@ -87,11 +87,11 @@ database_search_queue_init(volatile sqlite3 *db, char *col_name, char *rgx, stru
     ret->type = lkt_search_queue;
 
     /* Search part */
-    snprintf(SQL_STMT, LKT_MAX_SQLITE_STATEMENT - 1, SQL_STMT_TEMPLATE, col_name,
+    snprintf(SQL_STMT, LKT_MAX_SQLITE_STATEMENT - 1, SQL_STMT_TEMPLATE, ret->ka_col_name,
              ret->msg_count, ret->continuation);
     SQL_STMT[LKT_MAX_SQLITE_STATEMENT - 1] = 0;
     SQLITE_PREPARE(db, ret->stmt, SQL_STMT, error);
-    SQLITE_BIND_TEXT(db, ret->stmt, 1, rgx, error);
+    SQLITE_BIND_TEXT(db, ret->stmt, 1, ret->ka_rgx, error);
     ret->db = db;
     return true;
 error: