diff --git a/api/src/engine/connectors/datashield/datashield.connector.ts b/api/src/engine/connectors/datashield/datashield.connector.ts
index d91cfa45cb57ab0b89dfd263be4d43775bb522fa..244c56621dd6d018f73655df9fec142416934e21 100644
--- a/api/src/engine/connectors/datashield/datashield.connector.ts
+++ b/api/src/engine/connectors/datashield/datashield.connector.ts
@@ -324,7 +324,7 @@ export default class DataShieldConnector implements Connector {
     });
   }
 
-  async getDomains(_ids: string[], request: Request): Promise<Domain[]> {
+  async getDomains(request: Request): Promise<Domain[]> {
     const user = request.user as User;
     const sid = user && user.extraFields && user.extraFields['sid'];
 
diff --git a/api/src/engine/connectors/exareme/exareme.connector.ts b/api/src/engine/connectors/exareme/exareme.connector.ts
index 60acbd5f9042b11f1c3c562d0b95ea18b57ebcc6..c628a369f867ecb4b1da333269c284071b15166f 100644
--- a/api/src/engine/connectors/exareme/exareme.connector.ts
+++ b/api/src/engine/connectors/exareme/exareme.connector.ts
@@ -161,29 +161,27 @@ export default class ExaremeConnector implements Connector {
     }
   }
 
-  async getDomains(ids: string[], request: Request): Promise<Domain[]> {
+  async getDomains(request: Request): Promise<Domain[]> {
     const path = this.options.baseurl + 'pathologies';
 
     try {
       const data = await firstValueFrom(this.get<Pathology[]>(request, path));
 
       return (
-        data?.data
-          .filter((d) => !ids || ids.length == 0 || ids.includes(d.code))
-          .map((d): Domain => {
-            const groups = this.flattenGroups(d.metadataHierarchy);
-
-            return {
-              id: d.code,
-              label: d.label,
-              groups: groups,
-              rootGroup: dataToGroup(d.metadataHierarchy),
-              datasets: d.datasets ? d.datasets.map(dataToDataset) : [],
-              variables: d.metadataHierarchy
-                ? this.flattenVariables(d.metadataHierarchy, groups)
-                : [],
-            };
-          }) ?? []
+        data?.data.map((d): Domain => {
+          const groups = this.flattenGroups(d.metadataHierarchy);
+
+          return {
+            id: d.code,
+            label: d.label,
+            groups: groups,
+            rootGroup: dataToGroup(d.metadataHierarchy),
+            datasets: d.datasets ? d.datasets.map(dataToDataset) : [],
+            variables: d.metadataHierarchy
+              ? this.flattenVariables(d.metadataHierarchy, groups)
+              : [],
+          };
+        }) ?? []
       );
     } catch (error) {
       throw new HttpException(
diff --git a/api/src/engine/engine.resolver.ts b/api/src/engine/engine.resolver.ts
index f6ecef04897d77c9bef9488eabc74bfc484e83e1..69718a7c0b32763ccef141f96ea53774fcf015ae 100644
--- a/api/src/engine/engine.resolver.ts
+++ b/api/src/engine/engine.resolver.ts
@@ -63,12 +63,8 @@ export class EngineResolver {
   }
 
   @Query(() => [Domain])
-  async domains(
-    @GQLRequest() req: Request,
-    @Args('ids', { nullable: true, type: () => [String], defaultValue: [] })
-    ids: string[],
-  ) {
-    return this.engineService.getDomains(ids, req);
+  async domains(@GQLRequest() req: Request) {
+    return this.engineService.getDomains(req);
   }
 
   @Query(() => [Algorithm])
diff --git a/api/src/engine/engine.service.ts b/api/src/engine/engine.service.ts
index 7008ebe8daefe54091c5aee824b5eadd30da3fed..97ff0b4687613a9e8eb7863ab0e4814aa19d1ce6 100644
--- a/api/src/engine/engine.service.ts
+++ b/api/src/engine/engine.service.ts
@@ -31,6 +31,10 @@ import { FilterConfiguration } from './models/filter/filter-configuration';
 import { FormulaOperation } from './models/formula/formula-operation.model';
 import { Variable } from './models/variable.model';
 
+const DOMAINS_CACHE_KEY = 'domains';
+const ALGORITHMS_CACHE_KEY = 'experiments';
+const CACHE_KEYS = [DOMAINS_CACHE_KEY, ALGORITHMS_CACHE_KEY];
+
 /**
  * Engine service.
  * This class is used as a Proxy to the real Connector.
@@ -102,17 +106,18 @@ export default class EngineService implements Connector {
     return result;
   }
 
-  async getDomains(ids: string[], req: Request): Promise<Domain[]> {
+  async getDomains(req: Request): Promise<Domain[]> {
     const user = req?.user as User;
-    const key = user.id ? `domains-${ids.join('-')}-${user.id}` : undefined;
+    const key = user.id ? `${DOMAINS_CACHE_KEY}-${user.id}` : undefined;
 
     return this.getFromCacheOrCall<Domain[]>(key, () =>
-      this.connector.getDomains(ids, req),
+      this.connector.getDomains(req),
     );
   }
 
   async getAlgorithms(req: Request): Promise<Algorithm[]> {
-    const key = 'algorithms';
+    const user = req?.user as User;
+    const key = user.id ? `${ALGORITHMS_CACHE_KEY}-${user.id}` : undefined;
 
     return this.getFromCacheOrCall<Algorithm[]>(key, () =>
       this.connector.getAlgorithms(req),
@@ -133,7 +138,7 @@ export default class EngineService implements Connector {
   ): Promise<Variable[]> {
     if (!domainId || varIds.length === 0) return [];
 
-    const domains = await this.getDomains([], request);
+    const domains = await this.getDomains(request);
 
     return (
       domains
@@ -217,6 +222,13 @@ export default class EngineService implements Connector {
   }
 
   async logout?(req?: Request): Promise<void> {
+    const user = req?.user as User;
+
+    if (user && user.id)
+      CACHE_KEYS.map((key) => `${key}-${user.id}`).forEach((key) =>
+        this.cacheManager.del(key),
+      );
+
     if (!this.connector.logout) throw new NotImplementedException();
     return this.connector.logout(req);
   }
diff --git a/api/src/engine/interfaces/connector.interface.ts b/api/src/engine/interfaces/connector.interface.ts
index dc92dc71333914ca62d12a2b38da560848eb99a2..66224d6b9ec898e9b1a050cfacae17a2aff493f7 100644
--- a/api/src/engine/interfaces/connector.interface.ts
+++ b/api/src/engine/interfaces/connector.interface.ts
@@ -24,10 +24,9 @@ export default interface Connector {
 
   /**
    * Get the list of domains along with a list of variables
-   * @param ids - Ids to filter the domain needed
    * @param req - Request - this is the request object from the HTTP request.
    */
-  getDomains(ids: string[], req?: Request): Promise<Domain[]>;
+  getDomains(req?: Request): Promise<Domain[]>;
 
   /**
    * Create and return a full detailed experiment
diff --git a/api/src/schema.gql b/api/src/schema.gql
index 8a6d3ba0d14b20e3c5575c86a64c0e297c84a7c0..9caebad8a51a50abc7f9e8a0bb6be9058cd2d526 100644
--- a/api/src/schema.gql
+++ b/api/src/schema.gql
@@ -374,7 +374,7 @@ type ListExperiments {
 
 type Query {
   configuration: Configuration!
-  domains(ids: [String!] = []): [Domain!]!
+  domains: [Domain!]!
   algorithms: [Algorithm!]!
   formula: [FormulaOperation!]!
   filter: FilterConfiguration!