diff --git a/api/src/engine/connectors/csv/main.connector.ts b/api/src/engine/connectors/csv/main.connector.ts
index c9c2b6fd71a69082dbfc95d670c0a8d7a9d4ee87..bb5d0aaf32842b862904a1bfc177b5e1beef2c24 100644
--- a/api/src/engine/connectors/csv/main.connector.ts
+++ b/api/src/engine/connectors/csv/main.connector.ts
@@ -31,14 +31,29 @@ export default class CSVService implements IEngineService {
     data: ExperimentCreateInput,
     isTransient: boolean,
   ): Experiment | Promise<Experiment> {
-    throw new Error('Method not implemented.');
+    return {
+      id: '',
+      domain: '',
+      datasets: [],
+      algorithm: {
+        id: '',
+        description: '',
+      },
+      name: 'test',
+      variables: [],
+    };
   }
 
   listExperiments(
     page: number,
     name: string,
   ): ListExperiments | Promise<ListExperiments> {
-    throw new Error('Method not implemented.');
+    return {
+      experiments: [],
+      currentPage: 0,
+      totalExperiments: 0,
+      totalPages: 0,
+    };
   }
 
   getExperiment(id: string): Experiment | Promise<Experiment> {
@@ -83,35 +98,40 @@ export default class CSVService implements IEngineService {
 
       row.shift(); // get ride of the variable name, keep only groups
 
-      vars.push(variable);
+      if (!vars.find((v) => v.id === variable.id)) vars.push(variable); // avoid duplicate
 
-      row
-        .filter((group) => !groups[group.toLowerCase()])
-        .forEach((group, i) => {
-          const groupId = group.toLowerCase();
-          if (i === 0) rootGroup.groups.push(groupId);
-          groups[groupId] = {
-            id: groupId,
-            label: group,
-            variables: [],
-            groups: [],
-          };
-        });
+      let pathId = '';
+
+      row.forEach((group, i) => {
+        const groupId = `${pathId}/${group.toLowerCase()}`;
+        pathId = groupId;
+        if (groups[groupId]) return;
+        if (i === 0) {
+          rootGroup.groups.push(groupId);
+        }
+        groups[groupId] = {
+          id: groupId,
+          label: group,
+          variables: [],
+          groups: [],
+        };
+      });
 
-      const groupId = row[row.length - 1].toLowerCase(); // group's variable container
+      const groupId = pathId; // group's variable container
 
       groups[groupId].variables.push(variable.id); // add variable
 
-      row
+      row // fill groups with childrens
         .reverse()
         .map((group) => group.toLowerCase())
         .forEach((group, i) => {
-          const groupId = group.toLowerCase();
+          const id = pathId;
+          pathId = pathId.replace(`/${group}`, '');
 
           if (i !== row.length - 1) {
-            const parentId = row[i + 1].toLowerCase();
-            if (groups[parentId].groups.indexOf(groupId) === -1)
-              groups[parentId].groups.push(groupId);
+            const parentId = pathId;
+            if (groups[parentId].groups.indexOf(id) === -1)
+              groups[parentId].groups.push(id);
           }
         });
     });
diff --git a/api/src/engine/interceptors/headers.interceptor.ts b/api/src/engine/interceptors/headers.interceptor.ts
index 8dddccb93815c21cb0f92c79bd97d4fb293bfd35..385d6e56d579b562d7c797c556e8e0b8b9d91504 100644
--- a/api/src/engine/interceptors/headers.interceptor.ts
+++ b/api/src/engine/interceptors/headers.interceptor.ts
@@ -56,7 +56,7 @@ export class HeadersInterceptor implements NestInterceptor {
 
     return next.handle().pipe(
       catchError((e) => {
-        if (!e.response.data || !e.response.status) return e;
+        if (!e.response || !e.response.data || !e.response.status) throw e;
 
         this.logger.log(e.message);
         this.logger.verbose(