diff --git a/src/database/queue.c b/src/database/queue.c
index a74fd07388c01548410ed7c469df48608f2a8931..6ef69d50de2cbb7d9064b88b00ee9d3e5ce38070 100644
--- a/src/database/queue.c
+++ b/src/database/queue.c
@@ -439,141 +439,135 @@ error:
 bool
 database_queue_move(volatile sqlite3 *db, int from, int to)
 {
-    /* stmt arguments in order:
-     * 1. to
-     * 2. to
-     * 3. from
-     */
+    /* TODO: See if there is a solution with less lines of code */
+
     static const char *SQL_TEMPLATE_toINFfrom =
-        "BEGIN TRANSACTION;"
+        /* Clean queue_tmp */
         "DELETE FROM queue_tmp;"
+        "DELETE FROM sqlite_sequence WHERE name = 'queue_tmp';"
+        /* Construct queue */
         "INSERT INTO queue_tmp(position, kara_id,priority)"
-         "WITH TEMP_TABLE AS ("
-        "   SELECT ROW_NUMBER() OVER(ORDER BY priority DESC, position ASC) AS POSITION, kara_id, priority"
-        "   FROM queue)"
-        "   SELECT POSITION, kara_id, priority"
-        "   FROM TEMP_TABLE"
-        "   WHERE POSITION < %d AND POSITION != %d"
-        "   ORDER BY POSITION;"
+        "WITH TEMP_TABLE AS (SELECT"
+        "  ROW_NUMBER() OVER(ORDER BY priority DESC, position ASC) AS POSITION, kara_id, priority"
+        "  FROM queue)"
+        "SELECT POSITION, kara_id, priority"
+        "  FROM TEMP_TABLE WHERE POSITION < %d AND POSITION != %d ORDER BY POSITION;"
+        /* Construct queue */
         "INSERT INTO queue_tmp(position, kara_id,priority)"
-        "   VALUES(%d,("
-        "           WITH TEMP_TABLE AS ("
-        "               SELECT ROW_NUMBER() OVER(ORDER BY priority DESC, position ASC) AS POSITION, kara_id, priority"
-        "               FROM queue)"
-        "             SELECT kara_id"
-        "            FROM TEMP_TABLE"
-        "            WHERE POSITION = %d"
-        "           ),("
-        "              WITH TEMP_TABLE AS ("
-        "                   SELECT ROW_NUMBER() OVER(ORDER BY priority DESC, position ASC) AS POSITION, kara_id, priority"
-        "                   FROM queue)"
-        "           SELECT priority"
-        "              FROM TEMP_TABLE"
-        "              WHERE POSITION = %d"
-        "           ));";
+        "  VALUES(%d,("
+        "    WITH TEMP_TABLE AS ("
+        "      SELECT ROW_NUMBER() OVER(ORDER BY priority DESC, position ASC) AS POSITION,"
+        "        kara_id, priority FROM queue)"
+        "      SELECT kara_id FROM TEMP_TABLE WHERE POSITION = %d"
+        "    ),("
+        "      WITH TEMP_TABLE AS ("
+        "      SELECT ROW_NUMBER() OVER(ORDER BY priority DESC, position ASC) AS POSITION,"
+        "        kara_id, priority FROM queue)"
+        "      SELECT priority FROM TEMP_TABLE WHERE POSITION = %d"
+        "  ));";
+
     static const char *SQL_TEMPLATE_toSUPfrom_Part1 =
-        "BEGIN TRANSACTION;"
+        /* Clean queue_tmp */
         "DELETE FROM queue_tmp;"
+        "DELETE FROM sqlite_sequence WHERE name = 'queue_tmp';"
+        /* Construct queue */
         "INSERT INTO queue_tmp(position, kara_id,priority)"
-         "WITH TEMP_TABLE AS ("
-        "   SELECT ROW_NUMBER() OVER(ORDER BY priority DESC, position ASC) AS POSITION, kara_id, priority"
-        "   FROM queue)"
-        "   SELECT POSITION, kara_id, priority"
-        "   FROM TEMP_TABLE"
-        "   WHERE POSITION < %d"
-        "   ORDER BY POSITION;"
+        "WITH TEMP_TABLE AS (SELECT"
+        "  ROW_NUMBER() OVER(ORDER BY priority DESC, position ASC) AS POSITION, kara_id, priority"
+        "  FROM queue)"
+        "SELECT POSITION, kara_id, priority"
+        "  FROM TEMP_TABLE WHERE POSITION < %d ORDER BY POSITION;"
+        /* Construct queue */
         "INSERT INTO queue_tmp(position, kara_id,priority)"
-         "WITH TEMP_TABLE AS ("
-        "   SELECT ROW_NUMBER() OVER(ORDER BY priority DESC, position ASC) AS POSITION, kara_id, priority"
-        "   FROM queue)"
-        "   SELECT POSITION-1, kara_id, priority"
-        "   FROM TEMP_TABLE"
-        "   WHERE POSITION > %d AND POSITION < %d"
-        "   ORDER BY POSITION;";
-        static const char *SQL_TEMPLATE_toSUPfrom_Part2 =
+        "WITH TEMP_TABLE AS (SELECT"
+        "  ROW_NUMBER() OVER(ORDER BY priority DESC, position ASC) AS POSITION, kara_id, priority"
+        "  FROM queue)"
+        "SELECT POSITION - 1, kara_id, priority"
+        "  FROM TEMP_TABLE WHERE POSITION > %d AND POSITION < %d ORDER BY POSITION;";
+    static const char *SQL_TEMPLATE_toSUPfrom_Part2 =
+        /* Construct queue */
         "INSERT INTO queue_tmp(position, kara_id,priority)"
-        "   VALUES(%d-1,("
-        "           WITH TEMP_TABLE AS ("
-        "               SELECT ROW_NUMBER() OVER(ORDER BY priority DESC, position ASC) AS POSITION, kara_id, priority"
-        "               FROM queue)"
-        "             SELECT kara_id"
-        "            FROM TEMP_TABLE"
-        "            WHERE POSITION = %d"
-        "           ),("
-        "              WITH TEMP_TABLE AS ("
-        "                   SELECT ROW_NUMBER() OVER(ORDER BY priority DESC, position ASC) AS POSITION, kara_id, priority"
-        "                   FROM queue)"
-        "           SELECT priority"
-        "               FROM TEMP_TABLE"
-        "              WHERE POSITION = "
-        "               CASE"
-        "               WHEN (SELECT COUNT(*) FROM TEMP_TABLE)>=%d THEN %d"
-        "               ELSE %d-1"
-        "               END"
-        "           ));";
-        static const char *SQL_TEMPLATE_PART_2_toINFfrom =
+        "  VALUES(%d-1,("
+        "    WITH TEMP_TABLE AS (SELECT"
+        "      ROW_NUMBER() OVER(ORDER BY priority DESC, position ASC) AS POSITION,"
+        "      kara_id, priority FROM queue)"
+        "    SELECT kara_id FROM TEMP_TABLE WHERE POSITION = %d"
+        "  ),("
+        "    WITH TEMP_TABLE AS (SELECT"
+        "      ROW_NUMBER() OVER(ORDER BY priority DESC, position ASC) AS POSITION,"
+        "      kara_id, priority FROM queue)"
+        "    SELECT priority FROM TEMP_TABLE WHERE POSITION ="
+        "    CASE WHEN (SELECT COUNT(*) FROM TEMP_TABLE)>=%d THEN %d ELSE %d-1 END"
+        "));";
+
+    static const char *SQL_TEMPLATE_PART_2_toINFfrom =
+        /* Construct queue */
         "INSERT INTO queue_tmp(position, kara_id,priority)"
-        "WITH TEMP_TABLE AS ("
-        "   SELECT ROW_NUMBER() OVER(ORDER BY priority DESC, position ASC) AS POSITION, kara_id, priority"
-        "   FROM queue)"
-        "   SELECT (POSITION+1) , kara_id, priority"
-        "   FROM TEMP_TABLE"
-        "   WHERE POSITION >= %d AND POSITION < %d"
-        "   ORDER BY POSITION;"
+        "WITH TEMP_TABLE AS (SELECT"
+        "  ROW_NUMBER() OVER(ORDER BY priority DESC, position ASC) AS POSITION,"
+        "  kara_id, priority FROM queue)"
+        "SELECT (POSITION+1) , kara_id, priority"
+        "  FROM TEMP_TABLE WHERE POSITION >= %d AND POSITION < %d ORDER BY POSITION;"
         "INSERT INTO queue_tmp(position, kara_id,priority)"
-        "WITH TEMP_TABLE AS ("
-        "   SELECT ROW_NUMBER() OVER(ORDER BY priority DESC, position ASC) AS POSITION, kara_id, priority"
-        "   FROM queue)"
-        "   SELECT POSITION , kara_id, priority"
-        "   FROM TEMP_TABLE"
-        "   WHERE POSITION > %d AND POSITION >=%d"
-        "   ORDER BY POSITION;"
+        "  WITH TEMP_TABLE AS (SELECT"
+        "    ROW_NUMBER() OVER(ORDER BY priority DESC, position ASC) AS POSITION,"
+        "    kara_id, priority"
+        "    FROM queue)"
+        "  SELECT POSITION , kara_id, priority"
+        "  FROM TEMP_TABLE WHERE POSITION > %d AND POSITION >=%d ORDER BY POSITION;"
+        /* Clean queue and insert back */
         "DELETE FROM queue;"
+        "DELETE FROM sqlite_sequence WHERE name = 'queue';"
         "INSERT INTO queue(position, kara_id, priority)"
-        "   SELECT position, kara_id, priority"
-        "   FROM queue_tmp"
-        "   ORDER BY priority, position;"
-        "DELETE FROM queue_tmp;"
-        "COMMIT;";
-        static const char *SQL_TEMPLATE_PART_2_toSUPfrom =
+        "  SELECT position, kara_id, priority FROM queue_tmp ORDER BY priority, position;"
+        /* Clean queue_tmp */
+        "DELETE FROM sqlite_sequence WHERE name = 'queue_tmp';"
+        "DELETE FROM queue_tmp;";
+    static const char *SQL_TEMPLATE_PART_2_toSUPfrom =
+        /* Construct queue */
         "INSERT INTO queue_tmp(position, kara_id,priority)"
         "WITH TEMP_TABLE AS ("
-        "   SELECT ROW_NUMBER() OVER(ORDER BY priority DESC, position ASC) AS POSITION, kara_id, priority"
-        "   FROM queue)"
-        "   SELECT POSITION , kara_id, priority"
-        "   FROM TEMP_TABLE"
-        "   WHERE POSITION >= %d AND POSITION != %d"
-        "   ORDER BY POSITION;"
+        "  SELECT ROW_NUMBER() OVER(ORDER BY priority DESC, position ASC) AS POSITION,"
+        "    kara_id, priority FROM queue)"
+        "SELECT POSITION , kara_id, priority"
+        "  FROM TEMP_TABLE WHERE POSITION >= %d AND POSITION != %d ORDER BY POSITION;"
+        /* Clean queue and insert back */
         "DELETE FROM queue;"
+        "DELETE FROM sqlite_sequence WHERE name = 'queue';"
         "INSERT INTO queue(position, kara_id, priority)"
-        "   SELECT position, kara_id, priority"
-        "   FROM queue_tmp"
-        "   ORDER BY priority, position;"
-        "DELETE FROM queue_tmp;"
-        "COMMIT;";
-    bool ret = false;
-    char SQL_Part1[LKT_MAX_SQLITE_STATEMENT];
-    char SQL_Part2[LKT_MAX_SQLITE_STATEMENT];
-    char SQL_Part3[LKT_MAX_SQLITE_STATEMENT];
-    if(to < from) {
-        safe_snprintf(SQL_Part1, LKT_MAX_SQLITE_STATEMENT, SQL_TEMPLATE_toINFfrom, to, from, to, from, to);
-        safe_snprintf(SQL_Part2, LKT_MAX_SQLITE_STATEMENT, SQL_TEMPLATE_PART_2_toINFfrom, to, from, from, to);
-        SQLITE_EXEC(db, SQL_Part1, error);
-        SQLITE_EXEC(db, SQL_Part2, error);
+        "  SELECT position, kara_id, priority FROM queue_tmp ORDER BY priority, position;"
+        /* Clean queue_tmp */
+        "DELETE FROM sqlite_sequence WHERE name = 'queue_tmp';"
+        "DELETE FROM queue_tmp;";
+
+    char SQL[LKT_MAX_SQLITE_STATEMENT];
+
+    SQLITE_EXEC(db, "BEGIN TRANSACTION;", error_no_rollback);
+    if (to < from) {
+        safe_snprintf(SQL, LKT_MAX_SQLITE_STATEMENT, SQL_TEMPLATE_toINFfrom, to, from, to, from, to);
+        SQLITE_EXEC(db, SQL, error);
+
+        safe_snprintf(SQL, LKT_MAX_SQLITE_STATEMENT, SQL_TEMPLATE_PART_2_toINFfrom, to, from, from, to);
+        SQLITE_EXEC(db, SQL, error);
     }
+
     else {
-        safe_snprintf(SQL_Part1, LKT_MAX_SQLITE_STATEMENT, SQL_TEMPLATE_toSUPfrom_Part1, from, from, to);
-        safe_snprintf(SQL_Part2, LKT_MAX_SQLITE_STATEMENT, SQL_TEMPLATE_toSUPfrom_Part2, to, from, to,to,to);
-        safe_snprintf(SQL_Part3, LKT_MAX_SQLITE_STATEMENT, SQL_TEMPLATE_PART_2_toSUPfrom, to, from, from, to);
-        SQLITE_EXEC(db, SQL_Part1, error);
-        SQLITE_EXEC(db, SQL_Part2, error);
-        SQLITE_EXEC(db, SQL_Part3, error);
+        safe_snprintf(SQL, LKT_MAX_SQLITE_STATEMENT, SQL_TEMPLATE_toSUPfrom_Part1, from, from, to);
+        SQLITE_EXEC(db, SQL, error);
+
+        safe_snprintf(SQL, LKT_MAX_SQLITE_STATEMENT, SQL_TEMPLATE_toSUPfrom_Part2, to, from, to, to, to);
+        SQLITE_EXEC(db, SQL, error);
+
+        safe_snprintf(SQL, LKT_MAX_SQLITE_STATEMENT, SQL_TEMPLATE_PART_2_toSUPfrom, to, from, from, to);
+        SQLITE_EXEC(db, SQL, error);
     }
-    ret = true;
+
+    SQLITE_EXEC(db, "COMMIT;", error);
     return true;
 error:
     SQLITE_DO_ROLLBACK(db);
-    return ret;
+error_no_rollback:
+    return false;
 }
 
 bool