diff --git a/inc/lektor/database.h b/inc/lektor/database.h
index a1405c47860fcc7623cf19a2055c2219ee75c300..748916227b2fe9597a9e86c5fd5be187302ca837 100644
--- a/inc/lektor/database.h
+++ b/inc/lektor/database.h
@@ -100,7 +100,8 @@ struct lkt_search {
     int msg_count;      /* How much messages we can send. */
 };
 
-typedef bool (*lkt_search_database_func)(struct lkt_state *srv, size_t c, int id, int id_len, const char *row);
+typedef bool (*lkt_search_database_func)(struct lkt_state *srv, size_t c, int id, int id_len,
+        const char *row);
 
 bool database_search_queue_init(sqlite3 *db, char *col_name, char *rgx, struct lkt_search *ret);
 bool database_search_iter(struct lkt_search *item);
diff --git a/src/commands.c b/src/commands.c
index 7fd47c74cfcffe575cb6c4a9800b91f4d601dd9a..9f29e29adf6a6a26fcdccaad8d24905dfa3c25e2 100644
--- a/src/commands.c
+++ b/src/commands.c
@@ -545,13 +545,12 @@ command_find(struct lkt_state *srv, size_t c, char *cmd_args[LKT_MESSAGE_ARGS_MA
              enum lkt_find_action action)
 {
     char rgx[PATH_MAX], *col_name, *mpd_tag;
-    bool once;
-    struct lkt_message *not_found_msg;
+    int count;
     struct lkt_search search = {
         .srv = srv,
         .c = c,
         .continuation = continuation,
-        .msg_count = lkt_remaining_msg(srv, c),
+        .msg_count = lkt_remaining_msg(srv, c) - 3, /* Reserve slots for OK/ACK and continue: */
     };
 
     // Check args //
@@ -617,19 +616,14 @@ command_find(struct lkt_state *srv, size_t c, char *cmd_args[LKT_MESSAGE_ARGS_MA
         return false;
     }
 
-    for (once = false; database_search_iter(&search); once |= true)
+    for (count = 0; database_search_iter(&search); ++count)
         continue;
 
-    if (!once) {
-no_rgx:
-        not_found_msg = lkt_message_new();
-        not_found_msg->data_len = snprintf(not_found_msg->data,
-                                           LKT_MESSAGE_MAX,
-                                           "No kara found with regex\n");
-        lkt_state_send(srv, c, not_found_msg);
-    }
-
+    if (count)
+        lkt_set_continuation(srv, c, continuation + count);
     return true;
+no_rgx:
+    return false;
 }
 
 bool
@@ -966,7 +960,7 @@ command_queue_list(struct lkt_state *srv, size_t c, char *args[LKT_MESSAGE_ARGS_
     /* The command is used in its relative forme, display elements from the
        current one. */
 only_one:
-        return database_queue_list(srv->db, from, from, &callback);
+    return database_queue_list(srv->db, from, from, &callback);
 
     /* The command is used with a range specifier. */
 is_a_range:
diff --git a/src/database/find.c b/src/database/find.c
index 7230c9d2901748a44a89ab40288c261933ccf1ad..a0366d65482adc127bb0aa9af4d627205cb6be22 100644
--- a/src/database/find.c
+++ b/src/database/find.c
@@ -20,10 +20,11 @@ database_search_queue_init(sqlite3 *db, char *col_name, char *rgx, struct lkt_se
         " SELECT kara.id AS id, string AS any_col, LENGTH(CAST(kara.id AS TEXT)) AS len"
         " FROM kara WHERE %s LIKE ?)"
         "SELECT id, any_col, (SELECT MAX(len) FROM content)"
-        "FROM content;";
+        "FROM content LIMIT %d OFFSET %d;";
     char SQL_STMT[LKT_MAX_SQLITE_STATEMENT];
 
-    snprintf(SQL_STMT, LKT_MAX_SQLITE_STATEMENT - 1, SQL_STMT_TEMPLATE, col_name);
+    snprintf(SQL_STMT, LKT_MAX_SQLITE_STATEMENT - 1, SQL_STMT_TEMPLATE, 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);
diff --git a/src/main/lkt.c b/src/main/lkt.c
index 7d89e64e8da00e7b7d9534caa17dbd027013a4c2..ca1875c915f442f750855d5ac1e85c22cb613598 100644
--- a/src/main/lkt.c
+++ b/src/main/lkt.c
@@ -745,11 +745,7 @@ search_with_cmd__(struct lkt_cmd_args *args, const char *cmd)
 redo:
     sock = lkt_connect();
 
-    if (continuation > 0)
-        write_socket_format(sock, "%d ", continuation);
-
-    write_socket(sock, cmd, strlen(cmd));
-
+    write_socket_format(sock, "%d %s", continuation, cmd);
     for (i = 0; i < args->argc; ++i)
         write_socket_format(sock, " %s", args->argv[i]);
     write_socket(sock, "\n", sizeof("\n") / sizeof(char));
diff --git a/src/net/command.c b/src/net/command.c
index 130adca4b1ce11387b85614f651ad4c896637c34..33df59b7ea8856018480657dc5c2f7e42ab93932 100644
--- a/src/net/command.c
+++ b/src/net/command.c
@@ -12,9 +12,9 @@ lkt_command_parse(char *raw)
 {
     errno = 0;
     char *endptr;
-    struct lkt_command res = { .name = raw, .args = {0}, .cont = strtol(raw, &endptr, 0) };
+    struct lkt_command res = { .name = raw, .args = {0}, .cont = strtol(raw, &endptr, 10) };
 
-    if ((errno == ERANGE && (res.cont == LONG_MAX || res.cont == LONG_MIN)) || (errno != 0 && res.cont == 0)) {
+    if ((errno == ERANGE && (res.cont == LONG_MAX || res.cont == LONG_MIN)) || (errno != 0)) {
         res.cont = 0;
         goto skip_cont;
     }
@@ -30,7 +30,7 @@ lkt_command_parse(char *raw)
     }
 
     /* Get the real command name. */
-    raw = endptr + strcspn(raw, " ");
+    raw += strspn(raw, " 1234567890");
     if (!*raw)
         return res;
     res.name = raw;