diff --git a/src/controllers/plugins.controller.ts b/src/controllers/plugins.controller.ts
index 1ff7c39cd10807363107b6dcd84d030cc9e457da..1f0e5a089532e86e7a6b4b10e28e49fd09537f0f 100644
--- a/src/controllers/plugins.controller.ts
+++ b/src/controllers/plugins.controller.ts
@@ -20,6 +20,7 @@ import {PluginsManager} from '../services/plugins_manager.service';
 import {type Request, type Response, Router} from 'express';
 import fs from 'fs';
 import {Service} from 'typedi';
+import {NotFoundException} from '../interfaces/NotFoundException';
 import {StatusCodes} from 'http-status-codes';
 import {LanguageManager} from '../services/language_manager.service';
 
@@ -290,13 +291,12 @@ export class PluginsController {
           req.params.id,
           req.query.arch as string
         );
-        if (icon === '') {
-          console.log('sending not found ' + icon);
+        res.status(StatusCodes.OK).send(icon);
+      } catch (e) {
+        if (e instanceof NotFoundException) {
           res.status(StatusCodes.NOT_FOUND).send();
           return;
         }
-        res.status(StatusCodes.OK).send(icon);
-      } catch (e) {
         res.status(StatusCodes.INTERNAL_SERVER_ERROR).send();
       }
     });
@@ -394,12 +394,14 @@ export class PluginsController {
           req.params.id,
           req.query.arch as string
         );
-        res
-          .status(background === '' ? StatusCodes.NOT_FOUND : StatusCodes.OK)
-          .send(background === '' ? undefined : background);
+        res.status(StatusCodes.OK).send(background);
         return;
       } catch (e) {
-        res.status(StatusCodes.INTERNAL_SERVER_ERROR).send();
+        if (e instanceof NotFoundException) {
+          res.status(StatusCodes.NOT_FOUND).send();
+          return;
+        }
+        res.status(StatusCodes.NOT_FOUND).send();
       }
     });
   }
diff --git a/src/interfaces/NotFoundException.ts b/src/interfaces/NotFoundException.ts
new file mode 100644
index 0000000000000000000000000000000000000000..25b4d903d2db695330f2bc0a28e6d1436edf4b7d
--- /dev/null
+++ b/src/interfaces/NotFoundException.ts
@@ -0,0 +1 @@
+export class NotFoundException extends Error {}
diff --git a/src/services/certificate_manager.ts b/src/services/certificate_manager.ts
index c18cb13037675bfe4aaaa720420d49ffdd819a3b..5ea63b4c83b87a8f93334566a186c7cb0d22c75a 100644
--- a/src/services/certificate_manager.ts
+++ b/src/services/certificate_manager.ts
@@ -34,8 +34,8 @@ export class CertificateManagerService {
   ): Promise<X509Certificate> {
     return await this.fileManager
       .readArchive(path, file)
-      .then((content: string) => {
-        return new X509Certificate(Buffer.from(content));
+      .then((content: Buffer) => {
+        return new X509Certificate(content);
       });
   }
 
diff --git a/src/services/file_manager.service.ts b/src/services/file_manager.service.ts
index 925e0bc605f8113c7d90e37dd9e7fbf69b068cb0..15634921690c5a9c8dcc5288aba60931393889e3 100644
--- a/src/services/file_manager.service.ts
+++ b/src/services/file_manager.service.ts
@@ -61,16 +61,12 @@ export class FileManagerService {
     }
   }
 
-  async readArchive(path: string, file: string): Promise<string> {
-    try {
-      // eslint-disable-next-line
+  async readArchive(path: string, file: string): Promise<Buffer> {
+    // eslint-disable-next-line
       const zip = new StreamZip.async({ file: path });
-      const content = await zip.entryData(file);
-      zip.close();
-      return await Promise.resolve(content.toString());
-    } catch (e) {
-      return await Promise.resolve('');
-    }
+    const content = await zip.entryData(file);
+    zip.close();
+    return content;
   }
 
   async getStat(path: string): Promise<Stats> {
diff --git a/src/services/plugins_manager.service.ts b/src/services/plugins_manager.service.ts
index 96ff1a59e6e3c2585ac566cf43a4d5621ccdb2fa..e4e1afd097d894ab48b888d5d598ea7c2a0b268b 100644
--- a/src/services/plugins_manager.service.ts
+++ b/src/services/plugins_manager.service.ts
@@ -20,6 +20,7 @@ import {Service} from 'typedi';
 import {FileManagerService} from './file_manager.service';
 import {type Plugins} from '../interfaces/plugins';
 import {CertificateManagerService} from './certificate_manager';
+import {NotFoundException} from '../interfaces/NotFoundException';
 import {basename, extname} from 'path';
 
 @Service()
@@ -216,7 +217,7 @@ export class PluginsManager {
     background: string;
   }> {
     const manifest = JSON.parse(
-      await this.fileManager.readArchive(path, 'manifest.json')
+      (await this.fileManager.readArchive(path, 'manifest.json')).toString()
     );
     return {
       id: manifest.id === undefined ? manifest.name : manifest.id,
@@ -231,7 +232,7 @@ export class PluginsManager {
   async getIcon(
     id: string,
     arch: string | undefined = undefined
-  ): Promise<string> {
+  ): Promise<Buffer> {
     if (this.plugins.length === 0) {
       await this.setPlugins();
     }
@@ -248,7 +249,7 @@ export class PluginsManager {
       plugin.icon === undefined ||
       platform === undefined
     ) {
-      return '';
+      throw new NotFoundException('Plugin not found');
     }
 
     return await this.fileManager.readArchive(
@@ -321,7 +322,7 @@ export class PluginsManager {
           [platformPath]
         );
         // TODO: should refactor this because it's possible that two plugins in different platform have the same id
-        if ( plugin === undefined) {
+        if (plugin === undefined) {
           continue;
         }
         plugins.push(plugin);
@@ -330,7 +331,7 @@ export class PluginsManager {
     this.plugins = plugins;
   }
 
-  async getPluginBackground(id: string, arch: string): Promise<string> {
+  async getPluginBackground(id: string, arch: string): Promise<Buffer> {
     if (this.plugins.length === 0) {
       await this.setPlugins();
     }
@@ -345,30 +346,23 @@ export class PluginsManager {
       plugin.background === undefined ||
       platform === undefined
     ) {
-      return '';
+      throw new NotFoundException('Plugin not found');
     }
 
-    return await this.fileManager
-      .readArchive(
-        // eslint-disable-next-line
+    return await this.fileManager.readArchive(
+      // eslint-disable-next-line
       __dirname +
-          '/../..' +
-          process.env.DATA_DIRECTORY +
-          '/' +
-          plugin.id +
-          '/' +
-          platform +
-          '/' +
-          plugin.id +
-          '.jpl',
-        'data/' + plugin.background
-      )
-      .then(data => {
-        return data;
-      })
-      .catch(e => {
-        return '';
-      });
+        '/../..' +
+        process.env.DATA_DIRECTORY +
+        '/' +
+        plugin.id +
+        '/' +
+        platform +
+        '/' +
+        plugin.id +
+        '.jpl',
+      'data/' + plugin.background
+    );
   }
 
   private addPluginArch(platforms: string[], arches: string[]): void {
@@ -411,12 +405,13 @@ export class PluginsManager {
         }
         return await this.fileManager
           .readArchive(pluginPath, 'data/locale/' + languageFile)
-          .then((languageFileContent: string) => {
-            if (languageFileContent === '') {
+          .then((languageFileContent: Buffer) => {
+            if (languageFileContent.length === 0) {
               return text;
             }
-            const languageFileContentParsed = JSON.parse(languageFileContent);
-
+            const languageFileContentParsed = JSON.parse(
+              languageFileContent.toString()
+            );
             return text.replace(
               /(\{\{([^}]+)\}\})/g,
               (_: string, p1: string) => {
diff --git a/tests/certificate.manager.test.ts b/tests/certificate.manager.test.ts
index 86ff1bbad132cdb8489c9420c884e804feac26a9..eda62e0865e3c02fac96a0f753711bde816807cb 100644
--- a/tests/certificate.manager.test.ts
+++ b/tests/certificate.manager.test.ts
@@ -56,7 +56,7 @@ describe('Certificate manager service tests', function () {
         const expectedCertificate = await promises.readFile(`${__dirname}/TestCertificate.crt`);
         const expectedSubject = 'CN=Test';
 
-        fileManager.readArchive.resolves(expectedCertificate.toString());
+        fileManager.readArchive.resolves(expectedCertificate);
 
         const actual = await certificateManagerService['readCertificate'](path, file);
 
diff --git a/tests/plugins.controller.test.ts b/tests/plugins.controller.test.ts
index 00a637b1e50723349cfdc32db3a31cef7b95f13e..1e20ad003a4674a4151de70a6d24d9b6f8266243 100644
--- a/tests/plugins.controller.test.ts
+++ b/tests/plugins.controller.test.ts
@@ -177,13 +177,13 @@ describe('Routes', function () {
 
   it("should get icon if the given id is valid", (done) => {
     const expectedIcon = 'test';
-    pluginsManagerServiceStub.getIcon.resolves(expectedIcon);
+    pluginsManagerServiceStub.getIcon.resolves(Buffer.from(expectedIcon));
 
     request(expressApp)
       .get("/icons/test?arch=test")
       .expect(StatusCodes.OK)
       .then((response) => {
-        expect(response.text).toEqual(expectedIcon);
+        expect(response.body).toEqual(Buffer.from(expectedIcon));
         done();
       });
   });
diff --git a/tests/plugins.manager.test.ts b/tests/plugins.manager.test.ts
index 7732666df9de1ffb7b6e1fd54ccd78ce0eae73ae..8d2f54f353e90dcfeb0c3ecc3910b697166c0d8e 100644
--- a/tests/plugins.manager.test.ts
+++ b/tests/plugins.manager.test.ts
@@ -244,7 +244,7 @@ describe('Plugins manager service tests', function () {
             version: '1.0.0',
         };
 
-        fileManager.readArchive.resolves(JSON.stringify(manifest));
+        fileManager.readArchive.resolves(Buffer.from(JSON.stringify(manifest)));
 
         const actual = await pluginsManagerService['readManifest'](pluginPath);
 
@@ -280,12 +280,12 @@ describe('Plugins manager service tests', function () {
 
         const expected = 'test';
 
-        fileManager.readArchive.resolves(JSON.stringify(manifest));
-        fileManager.readArchive.resolves(expected);
+        fileManager.readArchive.resolves(Buffer.from(JSON.stringify(manifest)));
+        fileManager.readArchive.resolves(Buffer.from(expected));
         stub(Object.getPrototypeOf(pluginsManagerService), 'getPlatform').returns(['test']);
         const actual = await pluginsManagerService['getIcon']("test", "test");
 
-        expect(actual).toEqual(expected);
+        expect(actual).toEqual(Buffer.from(expected));
     });
 
     it('should return an array of plugin versions', async () => {