diff --git a/src/modules/bank.c b/src/modules/bank.c
index db92029cfc8aefcbf9570ce21ad04639d12a430d..1f70f0d364cc73a53a1ec81d1581e956f0efef6c 100644
--- a/src/modules/bank.c
+++ b/src/modules/bank.c
@@ -508,6 +508,11 @@ static void AllocatePluginDir (module_bank_t *bank, unsigned maxdepth,
     vlc_closedir (dh);
 }
 
+static int plugin_cmp(const void *first, const void *second)
+{
+    return strcmp((*(vlc_plugin_t **) first)->path, (*(vlc_plugin_t **) second)->path);
+}
+
 /**
  * Scans for plug-ins within a file system hierarchy.
  * \param path base directory to browse
@@ -547,8 +552,10 @@ static void AllocatePluginPath(libvlc_int_t *obj, const char *path,
             vlc_plugin_store(plugin);
     }
 
-    if (mode & CACHE_WRITE_FILE)
+    if (mode & CACHE_WRITE_FILE) {
+        qsort(bank.plugins, bank.size, sizeof(vlc_plugin_t *), plugin_cmp);
         CacheSave(obj, path, bank.plugins, bank.size);
+    }
 
     free(bank.plugins);
 }