diff --git a/src/services/file_manager.service.ts b/src/services/file_manager.service.ts
index 1317ea9c1958e62d35e6a309165d53ba4a3b303f..925e0bc605f8113c7d90e37dd9e7fbf69b068cb0 100644
--- a/src/services/file_manager.service.ts
+++ b/src/services/file_manager.service.ts
@@ -49,12 +49,13 @@ export class FileManagerService {
       const zip = new StreamZip.async({ file: path });
       const entries = await zip.entries();
       for (const entry of Object.values(entries)) {
-        if (entry.name.startsWith(folderPath)) {
-          files.push(entry.name);
+        const lib = entry.name.split('/')[1];
+        if (entry.name.startsWith(folderPath) && !files.includes(lib)) {
+          files.push(lib);
         }
       }
       zip.close();
-      return files.map((file: string) => file.split('/')[1]);
+      return files;
     } catch (e) {
       return [];
     }
diff --git a/src/services/plugins_manager.service.ts b/src/services/plugins_manager.service.ts
index 8d45c7322d91fa7e46af030b7d60fda6023c65fa..96ff1a59e6e3c2585ac566cf43a4d5621ccdb2fa 100644
--- a/src/services/plugins_manager.service.ts
+++ b/src/services/plugins_manager.service.ts
@@ -59,6 +59,7 @@ export class PluginsManager {
     }
     return await Promise.all(
       this.plugins
+        .filter(plugin => this.isPluginAvailable(plugin.id, arch))
         .map(async (plugin: Plugins) => {
           return {
             id: plugin.id,
@@ -81,7 +82,6 @@ export class PluginsManager {
             author: plugin.author,
           };
         })
-        .filter(async plugin => this.isPluginAvailable((await plugin).id, arch))
     );
   }
 
@@ -137,6 +137,10 @@ export class PluginsManager {
     ) {
       return undefined;
     }
+    const platform = this.getPlatform(arch);
+    if (platform === undefined) {
+      return undefined;
+    }
     return (
       // eslint-disable-next-line
       __dirname +
@@ -145,13 +149,19 @@ export class PluginsManager {
       '/' +
       id +
       '/' +
-      arch +
+      platform +
       '/' +
       id +
       '.jpl'
     );
   }
 
+  getPlatform(arch: string): string | undefined {
+    return Array.from(this.archesResolution.entries()).find(([_, value]) =>
+      value.includes(arch)
+    )?.[0];
+  }
+
   async getNewPlugin(
     path: string,
     platforms: string[]
@@ -231,10 +241,12 @@ export class PluginsManager {
         plugin.arches.includes(arch as string) &&
         arch !== undefined
     );
+    const platform = this.getPlatform(arch as string);
     if (
       plugin === undefined ||
       process.env.DATA_DIRECTORY === undefined ||
-      plugin.icon === undefined
+      plugin.icon === undefined ||
+      platform === undefined
     ) {
       return '';
     }
@@ -247,7 +259,7 @@ export class PluginsManager {
         '/' +
         plugin.id +
         '/' +
-        arch +
+        platform +
         '/' +
         plugin.id +
         '.jpl',
@@ -284,7 +296,7 @@ export class PluginsManager {
     }
     // eslint-disable-next-line
     dataDirectory = __dirname + '/../..' + dataDirectory;
-    const plugins = [];
+    const plugins: Plugins[] = [];
     const pluginsPath = await this.fileManager.listFiles(dataDirectory);
     if (pluginsPath === undefined || pluginsPath.length === 0) {
       return;
@@ -308,7 +320,8 @@ export class PluginsManager {
             '.jpl',
           [platformPath]
         );
-        if (plugin === undefined) {
+        // TODO: should refactor this because it's possible that two plugins in different platform have the same id
+        if ( plugin === undefined) {
           continue;
         }
         plugins.push(plugin);
@@ -325,10 +338,12 @@ export class PluginsManager {
       (plugin: Plugins) =>
         plugin.id === id && plugin.arches.includes(arch) && arch !== undefined
     );
+    const platform = this.getPlatform(arch);
     if (
       plugin === undefined ||
       process.env.DATA_DIRECTORY === undefined ||
-      plugin.background === undefined
+      plugin.background === undefined ||
+      platform === undefined
     ) {
       return '';
     }
@@ -342,7 +357,7 @@ export class PluginsManager {
           '/' +
           plugin.id +
           '/' +
-          arch +
+          platform +
           '/' +
           plugin.id +
           '.jpl',
@@ -361,7 +376,10 @@ export class PluginsManager {
       if (this.archesResolution.has(platform)) {
         const oldArches = this.archesResolution.get(platform);
         if (oldArches === undefined) {
-          this.archesResolution.set(platform, arches);
+          this.archesResolution.set(
+            platform,
+            JSON.parse(JSON.stringify(arches))
+          );
           continue;
         }
         for (const arch of arches) {
@@ -369,9 +387,12 @@ export class PluginsManager {
             oldArches.push(arch);
           }
         }
-        this.archesResolution.set(platform, oldArches);
+        this.archesResolution.set(
+          platform,
+          JSON.parse(JSON.stringify(oldArches))
+        );
       } else {
-        this.archesResolution.set(platform, arches);
+        this.archesResolution.set(platform, JSON.parse(JSON.stringify(arches)));
       }
     }
   }
diff --git a/tests/plugins.manager.test.ts b/tests/plugins.manager.test.ts
index 5ca17dc17993949d759efa36d7a8c9a3ea9678be..7732666df9de1ffb7b6e1fd54ccd78ce0eae73ae 100644
--- a/tests/plugins.manager.test.ts
+++ b/tests/plugins.manager.test.ts
@@ -128,7 +128,7 @@ describe('Plugins manager service tests', function () {
         process.env.DATA_DIRECTORY = '/path/to/plugins';
 
         stub(Object.getPrototypeOf(pluginsManagerService), 'isPluginAvailable').returns(true);
-
+        stub(Object.getPrototypeOf(pluginsManagerService), 'getPlatform').returns(['test']);
         const actualPath = await pluginsManagerService.getPluginPath('test', 'test');
 
         expect(actualPath).toContain(expectedPath);
@@ -282,7 +282,7 @@ describe('Plugins manager service tests', function () {
 
         fileManager.readArchive.resolves(JSON.stringify(manifest));
         fileManager.readArchive.resolves(expected);
-
+        stub(Object.getPrototypeOf(pluginsManagerService), 'getPlatform').returns(['test']);
         const actual = await pluginsManagerService['getIcon']("test", "test");
 
         expect(actual).toEqual(expected);