diff --git a/src/database/queue.c b/src/database/queue.c
index 1aee4b78701608bd0737128b8fff0c8470f3cdc2..1d4cd5f92ad52dfc18c43795469bdd2e688c83c7 100644
--- a/src/database/queue.c
+++ b/src/database/queue.c
@@ -574,128 +574,66 @@ error_no_rollback:
 bool
 database_queue_move(volatile sqlite3 *db, int from, int to)
 {
-    /* TODO: See if there is a solution with less lines of code */
-    static const char *SQL_TEMPLATE_toINFfrom =
+    static const char *SQL_TEMPLATE_PART_1 =
         /* 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)"
+        "INSERT INTO queue_tmp(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"
+        "  position, kara_id, priority"
+        "  FROM queue"
+        "  ORDER BY position ASC, priority DESC)"
+        "SELECT 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,("
+        "INSERT INTO queue_tmp(kara_id,priority)"
+        "  VALUES(("
         "    WITH TEMP_TABLE AS ("
-        "      SELECT ROW_NUMBER() OVER(ORDER BY priority DESC, position ASC) AS POSITION,"
+        "      SELECT ROW_NUMBER() OVER(ORDER BY position ASC, priority DESC) 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,"
+        "      SELECT ROW_NUMBER() OVER(ORDER BY position ASC, priority DESC) AS POSITION,"
         "        kara_id, priority FROM queue)"
-        "      SELECT priority FROM TEMP_TABLE WHERE POSITION = %d"
+        "      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_toSUPfrom_Part1 =
-        /* 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;"
-        /* 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 =
-        /* 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 =
+    static const char *SQL_TEMPLATE_PART_2 =
         /* 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;"
-        "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;"
-        /* 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;"
-        /* 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)"
+        "INSERT INTO queue_tmp(kara_id,priority)"
         "WITH TEMP_TABLE AS ("
-        "  SELECT ROW_NUMBER() OVER(ORDER BY priority DESC, position ASC) AS POSITION,"
+        "  SELECT ROW_NUMBER() OVER(ORDER BY position ASC, priority DESC) AS POSITION,"
         "    kara_id, priority FROM queue)"
-        "SELECT POSITION , kara_id, priority"
+        "SELECT kara_id, priority"
         "  FROM TEMP_TABLE WHERE POSITION >= %d AND POSITION != %d ORDER BY POSITION;"
         /* Clean queue and insert back */
+        "UPDATE queue_state"
+        "  SET current = CASE"
+        "    WHEN current NOT NULL "
+        "    THEN (SELECT position FROM queue_tmp "
+        "       WHERE kara_id=(SELECT kara_id FROM queue WHERE position = current)"
+        "    ELSE NULL END;"
         "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;"
         /* 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, LKT_MAX_SQLITE_STATEMENT, SQL_TEMPLATE_toSUPfrom_Part1, from, from, to);
+        safe_snprintf(SQL, LKT_MAX_SQLITE_STATEMENT, SQL_TEMPLATE_PART_1,to,from, from, to, to, to);
         SQLITE_EXEC(db, SQL, error);
 
-        safe_snprintf(SQL, LKT_MAX_SQLITE_STATEMENT, SQL_TEMPLATE_toSUPfrom_Part2, to, from, to, to, to);
+        safe_snprintf(SQL, LKT_MAX_SQLITE_STATEMENT, SQL_TEMPLATE_PART_2, to, from);
         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);
-    }
-
     SQLITE_EXEC(db, "COMMIT;", error);
     return true;
 error: