diff --git a/inc/common/macro.h b/inc/common/macro.h
index 3e220015527cf73428f3a5799b45d417e6c0b9e5..8b1b527e5c3c1f4460b5f478af963b791b52f3e4 100644
--- a/inc/common/macro.h
+++ b/inc/common/macro.h
@@ -161,7 +161,6 @@ typedef volatile enum {
 
 #define SQLITE_STEP_ROW(db, stmt, error)    SQLITE_STEP(db, stmt, SQLITE_ROW, error)
 #define SQLITE_STEP_DONE(db, stmt, error)   SQLITE_STEP(db, stmt, SQLITE_DONE, error)
-#define SQLITE_STEP_OK(db, stmt, error)     SQLITE_STEP(db, stmt, SQLITE_OK, error)
 
 #define SQLITE_DO_ROLLBACK(db)                                          \
     sqlite3_exec((sqlite3 *) db, "ROLLBACK TRANSACTION;\n", NULL, NULL, NULL);
diff --git a/inc/lektor/database.h b/inc/lektor/database.h
index c2d090799c38f9184c682abf0a28af80f9d4ec4a..b0383152b10acc95f9d82f029f2a74fafa7e6b47 100644
--- a/inc/lektor/database.h
+++ b/inc/lektor/database.h
@@ -50,6 +50,7 @@ bool database_update              (volatile sqlite3 *db, const char *kara_dir, i
 bool database_update_add          (volatile sqlite3 *db, const char *kara_path, struct kara_metadata *mdt, uint64_t id, bool avail);
 bool database_update_set_available(volatile sqlite3 *db, int id);
 void database_update_del          (volatile sqlite3 *db, int id);
+void database_update_touch        (volatile sqlite3 *db, int id);
 
 /* Control the content of the queue. */
 bool database_queue_add_uri(volatile sqlite3 *db, struct lkt_uri *uri, int priority);
diff --git a/src/database/playlist.c b/src/database/playlist.c
index a805e47b214f86c4d35dbb9eadbd3430f6c3ac36..b3d259ab8066d934b47fe7c4be47940baf215330 100644
--- a/src/database/playlist.c
+++ b/src/database/playlist.c
@@ -51,7 +51,7 @@ database_plt_remove_pos(volatile sqlite3 *db, const char *name, int pos)
     SQLITE_PREPARE(db, stmt, SQL_STMT, error);
     SQLITE_BIND_TEXT(db, stmt, 1, name, error);
     SQLITE_BIND_INT(db, stmt, 2, pos, error);
-    SQLITE_STEP_OK(db, stmt, error);
+    SQLITE_STEP_DONE(db, stmt, error);
     sta = true;
 error:
     sqlite3_finalize(stmt);
@@ -67,7 +67,7 @@ database_plt_clear(volatile sqlite3 *db, const char *name)
     bool sta = false;
     SQLITE_PREPARE(db, stmt, SQL_STMT, error);
     SQLITE_BIND_TEXT(db, stmt, 1, name, error);
-    SQLITE_STEP_OK(db, stmt, error);
+    SQLITE_STEP_DONE(db, stmt, error);
     sta = true;
 error:
     sqlite3_finalize(stmt);
@@ -83,7 +83,7 @@ database_plt_rename(volatile sqlite3 *db, const char *old_name, const char *new_
     SQLITE_PREPARE(db, stmt, SQL_STMT, error);
     SQLITE_BIND_TEXT(db, stmt, 1, new_name, error);
     SQLITE_BIND_TEXT(db, stmt, 2, old_name, error);
-    SQLITE_STEP_OK(db, stmt, error);
+    SQLITE_STEP_DONE(db, stmt, error);
     sta = true;
 error:
     sqlite3_finalize(stmt);
diff --git a/src/database/stickers.c b/src/database/stickers.c
index 6f52e6eee8ea4ed773e13a59ace2d13242019ef8..149be88f8bc25201ec3730d49eee2ba03f8ae567 100644
--- a/src/database/stickers.c
+++ b/src/database/stickers.c
@@ -37,7 +37,7 @@ database_sticker_delete(volatile sqlite3 *db, const char *name)
     RETURN_IF(strlen(name) == 0, "A sticker name must be at least one character long", ret);
     SQLITE_PREPARE(db, stmt, INSERT, error);
     SQLITE_BIND_TEXT(db, stmt, 1, name, error);
-    SQLITE_STEP_OK(db, stmt, error);
+    SQLITE_STEP_DONE(db, stmt, error);
     ret = true;
 error:
     sqlite3_finalize(stmt);
@@ -117,7 +117,7 @@ database_sticker_delete_specify(volatile sqlite3 *db, const char *type, int uri,
     if (name)
         SQLITE_BIND_TEXT(db, stmt, 2, name, error);
 
-    SQLITE_STEP_OK(db, stmt, error);
+    SQLITE_STEP_DONE(db, stmt, error);
     ret = true;
 error:
     sqlite3_finalize(stmt);
diff --git a/src/database/update.c b/src/database/update.c
index 7ff464aa795b96b77fc3bd8d34e054de40049a3c..bef7c3f913cc4003a0287517db550e1eab010f00 100644
--- a/src/database/update.c
+++ b/src/database/update.c
@@ -24,7 +24,7 @@ __add_kara_to_update_job(volatile sqlite3 *db, size_t id)
     sqlite3_stmt *stmt;
     SQLITE_PREPARE(db, stmt, SQL, error);
     SQLITE_BIND_INT(db, stmt, 1, (int) id, error);
-    SQLITE_STEP_OK(db, stmt, error);
+    SQLITE_STEP_DONE(db, stmt, error);
     return true;
 error:
     return false;
@@ -224,7 +224,7 @@ database_deleted_kara(volatile sqlite3 *db, int **kara_id, size_t *len)
 
     while (sqlite3_step(stmt) == SQLITE_ROW) {
         if (size == *len) {
-            new = realloc((void *) kara_id, (*len) * 2 * sizeof(void *));
+            new = realloc(*kara_id, size * 2 * sizeof(int));
             GOTO_UNLESS(new, "Out of memory", out);
             size *= 2;
             *kara_id = new;
@@ -254,6 +254,12 @@ error:
     LOG_WARN_SCT("DB", "Failed to get informations about the last update: %s", sqlite3_errmsg((sqlite3 *) db));
 }
 
+void
+database_update_touch(volatile sqlite3 *db, int id)
+{
+    __add_kara_to_update_job(db, id);
+}
+
 void
 database_update_del(volatile sqlite3 *db, int id)
 {
@@ -261,7 +267,7 @@ database_update_del(volatile sqlite3 *db, int id)
     sqlite3_stmt *stmt = NULL;
     SQLITE_PREPARE(db, stmt, SQL, error);
     SQLITE_BIND_INT(db, stmt, 1, id, error);
-    SQLITE_STEP_OK(db, stmt, error);
+    SQLITE_STEP_DONE(db, stmt, error);
     LOG_WARN_SCT("DB", "Deleted kara with id '%d' from database", id);
 error:
     return;
@@ -269,7 +275,7 @@ error:
 
 #define sqlite_just_exec(func, query)   \
     void func (volatile sqlite3 *db) {  \
-        SQLITE_EXEC(db, #query, error); \
+        SQLITE_EXEC(db, query, error);  \
         error: return;                  \
     }
 sqlite_just_exec(database_stamp, "UPDATE misc SET last_update = strftime('%s','now');")
diff --git a/src/database/user.c b/src/database/user.c
index cad67826f5fec56ab1e9b58dea3121d729de8a28..8460216eb5cb5f174506a908b92f19bd586bc3b0 100644
--- a/src/database/user.c
+++ b/src/database/user.c
@@ -29,7 +29,7 @@ database_user_add(volatile sqlite3 *db, const char *username, const char *passwo
     SQLITE_PREPARE(db, stmt, SQL_STMT, error);
     SQLITE_BIND_TEXT(db, stmt, 1, username, error);
     SQLITE_BIND_TEXT(db, stmt, 2, password, error);
-    SQLITE_STEP_OK(db, stmt, error);
+    SQLITE_STEP_DONE(db, stmt, error);
     LOG_INFO_SCT("DB", "User '%s' successfully added", username);
     ret = true;
 error:
diff --git a/src/net/downloader.c b/src/net/downloader.c
index 9606701e0e7a89b1bd3f3e15430df3f142864528..b4cfa451224c534499985fe9d50e952764049461 100644
--- a/src/net/downloader.c
+++ b/src/net/downloader.c
@@ -369,6 +369,7 @@ __handle_got_json(volatile sqlite3 *db, struct lkt_repo *repo, struct json_objec
         database_get_update(db, &db_timestamp, NULL, NULL);
         if (db_timestamp >= filestamp && filestamp > timestamp &&
             ! kara_metadata_equals(&kara.mdt, kara.filename)) {
+            database_update_touch(db, kara.id);
             LOG_INFO_SCT("REPO", "Ignore kara '%ld' with path '%s'", kara.id, kara.filename);
             continue;
         }
@@ -407,12 +408,12 @@ __handle_deleted_kara(volatile sqlite3 *db)
     int *kara_ids;
     char filepath[PATH_MAX];
     database_deleted_kara(db, &kara_ids, &len);
-
     for (i = 0; i < len; ++i) {
         if (!database_get_kara_path(db, kara_ids[i], filepath))
             continue;
         database_update_del(db, kara_ids[i]);
     }
+    free(kara_ids);
 }
 
 void *