diff --git a/alglib/apps/playlist.c b/alglib/apps/playlist.c
index 48434362bc4875d04b5e63dff966390e2bb8b48b..4baabcb90cb096c75cc61f8c62ece335303e3ad0 100644
--- a/alglib/apps/playlist.c
+++ b/alglib/apps/playlist.c
@@ -144,22 +144,22 @@ void playlist_sort(playlist_t playlist, playlist_sorting_criterion_t order_by)
      *     compar
      * );
     */
+    // per l'ordinamento multi criterio può funzionare solo il merge sort perché
+    // è l'unico stabile tra i presenti
+    upo_merge_sort(
+        playlist->entries,
+        playlist->size,
+        sizeof(*(playlist->entries)),
+        compar
+    );
     /*
-     * upo_merge_sort(
+     * upo_quick_sort(
      *     playlist->entries,
      *     playlist->size,
      *     sizeof(*(playlist->entries)),
      *     compar
      * );
-    */
-    // penso che per l'ordinamento multi criterio debba funzionare solo questo perché è l'unico
-    // stabile ma risultano alcune tracce messe dove non dovrebbero essere
-    upo_quick_sort(
-        playlist->entries,
-        playlist->size,
-        sizeof(*(playlist->entries)),
-        compar
-    );
+     */
 }
 
 
diff --git a/alglib/src/sort.c b/alglib/src/sort.c
index 3a11b90f83be28278d2c4be0f12b33c2b393d15f..74f0d56a192d262442fd6c121d66a845d0a6dce1 100644
--- a/alglib/src/sort.c
+++ b/alglib/src/sort.c
@@ -84,7 +84,7 @@ static void upo_merge_sort_merge(
         unsigned char *curr1 = (unsigned char *)base1 + i1 * size;
         unsigned char *curr2 = (unsigned char *)base2 + i2 * size;
         unsigned char *currtmp = tmp + (i1 + i2) * size;
-        if (cmp(curr1, curr2) < 0) {
+        if (cmp(curr1, curr2) <= 0) {
             memcpy(currtmp, curr1, size);
             ++i1;
         } else {