diff --git a/api/src/engine/connectors/datashield/main.connector.ts b/api/src/engine/connectors/datashield/main.connector.ts
index 4a0f2220c806b480d30a07cb1634e1aac953d943..829147fe9b985703be4868f6e12b8889884d8abe 100644
--- a/api/src/engine/connectors/datashield/main.connector.ts
+++ b/api/src/engine/connectors/datashield/main.connector.ts
@@ -14,37 +14,43 @@ export default class DataShieldService implements IEngineService {
   getAlgorithms(): Algorithm[] | Promise<Algorithm[]> {
     throw new Error('Method not implemented.');
   }
+
   createExperiment(
     data: ExperimentCreateInput,
     isTransient: boolean,
   ): Experiment | Promise<Experiment> {
     throw new Error('Method not implemented.');
   }
+
   listExperiments(
     page: number,
     name: string,
   ): ListExperiments | Promise<ListExperiments> {
     throw new Error('Method not implemented.');
   }
+
   getExperiment(uuid: string): Experiment | Promise<Experiment> {
     throw new Error('Method not implemented.');
   }
+
   removeExperiment(
     uuid: string,
   ): PartialExperiment | Promise<PartialExperiment> {
     throw new Error('Method not implemented.');
   }
+
   editExperient(
     uuid: string,
     expriment: ExperimentEditInput,
   ): Experiment | Promise<Experiment> {
     throw new Error('Method not implemented.');
   }
+
   getDomains(): Domain[] {
     throw new Error('Method not implemented.');
   }
 
-  getActiveUser(): Observable<string> {
+  getActiveUser(): string {
     throw new Error('Method not implemented.');
   }
 
@@ -72,11 +78,11 @@ export default class DataShieldService implements IEngineService {
     throw new Error('Method not implemented.');
   }
 
-  getExperiments(): Observable<string> {
+  getExperiments(): string {
     throw new Error('Method not implemented.');
   }
 
-  getAlgorithmsREST(): Observable<string> {
+  getAlgorithmsREST(): string {
     throw new Error('Method not implemented.');
   }
 }
diff --git a/api/src/engine/connectors/exareme/converters.ts b/api/src/engine/connectors/exareme/converters.ts
index 80811045c0862864d4ba704712a9b0efa606685b..07fb2b4b0cfa378b1950147be5862307d4ff4ea9 100644
--- a/api/src/engine/connectors/exareme/converters.ts
+++ b/api/src/engine/connectors/exareme/converters.ts
@@ -28,7 +28,9 @@ export const dataToGroup = (data: Hierarchy): Group => {
     id: data.code,
     label: data.label,
     groups: data.groups ? data.groups.map(dataToGroup) : [],
-    variables: data.variables ? data.variables.map(dataToVariable) : [],
+    variables: data.variables
+      ? data.variables.map((data: VariableEntity) => data.code)
+      : [],
   };
 };
 
diff --git a/api/src/engine/connectors/local/main.connector.ts b/api/src/engine/connectors/local/main.connector.ts
new file mode 100644
index 0000000000000000000000000000000000000000..2ff1a44faa75d436313c152256cfdcf46299121d
--- /dev/null
+++ b/api/src/engine/connectors/local/main.connector.ts
@@ -0,0 +1,110 @@
+import { Observable } from 'rxjs';
+import { IEngineService } from 'src/engine/engine.interfaces';
+import { Domain } from 'src/engine/models/domain.model';
+import { ExperimentCreateInput } from 'src/engine/models/experiment/input/experiment-create.input';
+import {
+  Experiment,
+  PartialExperiment,
+} from 'src/engine/models/experiment/experiment.model';
+import { ListExperiments } from 'src/engine/models/experiment/list-experiments.model';
+import { ExperimentEditInput } from 'src/engine/models/experiment/input/experiment-edit.input';
+import { Algorithm } from 'src/engine/models/experiment/algorithm.model';
+
+export default class LocalService implements IEngineService {
+  getAlgorithms(): Algorithm[] | Promise<Algorithm[]> {
+    throw new Error('Method not implemented.');
+  }
+
+  createExperiment(
+    data: ExperimentCreateInput,
+    isTransient: boolean,
+  ): Experiment | Promise<Experiment> {
+    throw new Error('Method not implemented.');
+  }
+
+  listExperiments(
+    page: number,
+    name: string,
+  ): ListExperiments | Promise<ListExperiments> {
+    throw new Error('Method not implemented.');
+  }
+
+  getExperiment(uuid: string): Experiment | Promise<Experiment> {
+    throw new Error('Method not implemented.');
+  }
+
+  removeExperiment(
+    uuid: string,
+  ): PartialExperiment | Promise<PartialExperiment> {
+    throw new Error('Method not implemented.');
+  }
+
+  editExperient(
+    uuid: string,
+    expriment: ExperimentEditInput,
+  ): Experiment | Promise<Experiment> {
+    throw new Error('Method not implemented.');
+  }
+
+  getDomains(): Domain[] {
+    return [
+      {
+        id: 'Dummy',
+        label: 'Dummy',
+        datasets: [{ id: 'DummyDataset', label: 'DummyDataset' }],
+        groups: [
+          {
+            id: 'DummyGroup',
+            variables: ['DummyVar'],
+            groups: [],
+          },
+        ],
+        rootGroup: { id: 'DummyGroup' },
+        variables: [{ id: 'DummyVar', type: 'string' }],
+      },
+    ];
+  }
+
+  getActiveUser(): string {
+    const dummyUser = {
+      username: 'anonymous',
+      subjectId: 'anonymousId',
+      fullname: 'anonymous',
+      email: 'anonymous@anonymous.com',
+      agreeNDA: true,
+    };
+    return JSON.stringify(dummyUser);
+  }
+
+  editActiveUser(): Observable<string> {
+    throw new Error('Method not implemented.');
+  }
+
+  getExperimentREST(): Observable<string> {
+    throw new Error('Method not implemented.');
+  }
+
+  deleteExperiment(): Observable<string> {
+    throw new Error('Method not implemented.');
+  }
+
+  editExperimentREST(): Observable<string> {
+    throw new Error('Method not implemented.');
+  }
+
+  startExperimentTransient(): Observable<string> {
+    throw new Error('Method not implemented.');
+  }
+
+  startExperiment(): Observable<string> {
+    throw new Error('Method not implemented.');
+  }
+
+  getExperiments(): string {
+    return '[]';
+  }
+
+  getAlgorithmsREST(): string {
+    return '[]';
+  }
+}
diff --git a/api/src/engine/engine.controller.ts b/api/src/engine/engine.controller.ts
index 6c5949493e6c59ddc759d0f83b9c4d363a578a9e..fe65f352e83e325879d414855a582ad5fec8619a 100644
--- a/api/src/engine/engine.controller.ts
+++ b/api/src/engine/engine.controller.ts
@@ -20,17 +20,17 @@ export class EngineController {
   ) {}
 
   @Get('/algorithms')
-  getAlgorithms(@Req() request: Request): Observable<string> {
+  getAlgorithms(@Req() request: Request): Observable<string> | string {
     return this.engineService.getAlgorithmsREST(request);
   }
 
   @Get('/experiments')
-  getExperiments(@Req() request: Request): Observable<string> {
+  getExperiments(@Req() request: Request): Observable<string> | string {
     return this.engineService.getExperiments(request);
   }
 
   @Get('/experiments/:uuid')
-  getExperiment(@Param('uuid') uuid: string): Observable<string> {
+  getExperiment(@Param('uuid') uuid: string): Observable<string> | string {
     return this.engineService.getExperimentREST(uuid);
   }
 
@@ -38,7 +38,7 @@ export class EngineController {
   deleteExperiment(
     @Param('uuid') uuid: string,
     @Req() request: Request,
-  ): Observable<string> {
+  ): Observable<string> | string {
     return this.engineService.deleteExperiment(uuid, request);
   }
 
@@ -46,27 +46,29 @@ export class EngineController {
   editExperiment(
     @Param('uuid') uuid: string,
     @Req() request: Request,
-  ): Observable<string> {
+  ): Observable<string> | string {
     return this.engineService.editExperimentREST(uuid, request);
   }
 
   @Post('experiments/transient')
-  startExperimentTransient(@Req() request: Request): Observable<string> {
+  startExperimentTransient(
+    @Req() request: Request,
+  ): Observable<string> | string {
     return this.engineService.startExperimentTransient(request);
   }
 
   @Post('experiments')
-  startExperiment(@Req() request: Request): Observable<string> {
+  startExperiment(@Req() request: Request): Observable<string> | string {
     return this.engineService.startExperiment(request);
   }
 
   @Get('activeUser')
-  getActiveUser(@Req() request: Request): Observable<string> {
+  getActiveUser(@Req() request: Request): Observable<string> | string {
     return this.engineService.getActiveUser(request);
   }
 
   @Post('activeUser/agreeNDA')
-  agreeNDA(@Req() request: Request): Observable<string> {
+  agreeNDA(@Req() request: Request): Observable<string> | string {
     return this.engineService.editActiveUser(request);
   }
 }
diff --git a/api/src/engine/engine.interfaces.ts b/api/src/engine/engine.interfaces.ts
index 26818b01868edbd7191461de19ed904310a15d1e..e3f68aa1b75967c8d9cca9b8c52c4a120f0d7a43 100644
--- a/api/src/engine/engine.interfaces.ts
+++ b/api/src/engine/engine.interfaces.ts
@@ -43,21 +43,24 @@ export interface IEngineService {
   getAlgorithms(): Promise<Algorithm[]> | Algorithm[];
 
   // Standard REST API call
-  getAlgorithmsREST(request: Request): Observable<string>;
+  getAlgorithmsREST(request: Request): Observable<string> | string;
 
-  getExperiments(request: Request): Observable<string>;
+  getExperiments(request: Request): Observable<string> | string;
 
-  getExperimentREST(uuid: string): Observable<string>;
+  getExperimentREST(uuid: string): Observable<string> | string;
 
-  deleteExperiment(uuid: string, request: Request): Observable<string>;
+  deleteExperiment(uuid: string, request: Request): Observable<string> | string;
 
-  editExperimentREST(uuid: string, request: Request): Observable<string>;
+  editExperimentREST(
+    uuid: string,
+    request: Request,
+  ): Observable<string> | string;
 
-  startExperimentTransient(request: Request): Observable<string>;
+  startExperimentTransient(request: Request): Observable<string> | string;
 
-  startExperiment(request: Request): Observable<string>;
+  startExperiment(request: Request): Observable<string> | string;
 
-  getActiveUser(request: Request): Observable<string>;
+  getActiveUser(request: Request): Observable<string> | string;
 
-  editActiveUser(request: Request): Observable<string>;
+  editActiveUser(request: Request): Observable<string> | string;
 }
diff --git a/api/src/engine/models/domain.model.ts b/api/src/engine/models/domain.model.ts
index 8c3c593cc06bf0611a9aac2ffdd92ccfa21fb2f3..f5b8def42a318613b348040b2eccb3ea67a7aa29 100644
--- a/api/src/engine/models/domain.model.ts
+++ b/api/src/engine/models/domain.model.ts
@@ -1,9 +1,20 @@
 import { Field, ObjectType } from '@nestjs/graphql';
 import { Category } from './category.model';
+import { Entity } from './entity.model';
 import { Group } from './group.model';
+import { Variable } from './variable.model';
 
 @ObjectType()
-export class Domain extends Group {
+export class Domain extends Entity {
+  @Field({ nullable: true })
+  description?: string;
+
+  @Field(() => [Group])
+  groups: Group[];
+
+  @Field(() => [Variable])
+  variables: Variable[];
+
   @Field(() => [Category])
   datasets: Category[];
 
diff --git a/api/src/engine/models/group.model.ts b/api/src/engine/models/group.model.ts
index c2087ba2c6023a4a3d7f17110e3e739709d08a90..6c4880262e3a538114f3e4717d9c4ddabf7a061d 100644
--- a/api/src/engine/models/group.model.ts
+++ b/api/src/engine/models/group.model.ts
@@ -1,15 +1,18 @@
 import { Field, ObjectType } from '@nestjs/graphql';
 import { Entity } from './entity.model';
-import { Variable } from './variable.model';
 
 @ObjectType()
 export class Group extends Entity {
   @Field({ nullable: true })
   description?: string;
 
-  @Field(() => [Group])
-  groups: Group[];
+  @Field(() => [Group], { defaultValue: [], nullable: true })
+  groups?: Group[];
 
-  @Field(() => [Variable])
-  variables: Variable[];
+  @Field(() => [String], {
+    description: "List of variable's ids",
+    defaultValue: [],
+    nullable: true,
+  })
+  variables?: string[];
 }
diff --git a/api/src/engine/models/variable.model.ts b/api/src/engine/models/variable.model.ts
index e3c4098e31fccbcc4bd223c82ea55225559edaaf..8650f48b1044bb07c88964ae36aeb00d0d9a3d1b 100644
--- a/api/src/engine/models/variable.model.ts
+++ b/api/src/engine/models/variable.model.ts
@@ -11,9 +11,9 @@ export class Variable extends Entity {
   @Field({ nullable: true })
   description?: string;
 
-  @Field(() => [Category])
-  enumerations: Category[];
+  @Field(() => [Category], { nullable: true, defaultValue: [] })
+  enumerations?: Category[];
 
-  @Field(() => [Group])
-  groups: Group[];
+  @Field(() => [Group], { nullable: true, defaultValue: [] })
+  groups?: Group[];
 }
diff --git a/api/src/schema.gql b/api/src/schema.gql
index aad684192e33c70fa81041ad58ef4c8d0b3bd6c8..c906a1951ce36cba5961ced0c2853ef6ddb2658c 100644
--- a/api/src/schema.gql
+++ b/api/src/schema.gql
@@ -7,21 +7,23 @@ type Category {
   label: String
 }
 
-type Variable {
+type Group {
   id: String!
   label: String
-  type: String!
   description: String
-  enumerations: [Category!]!
-  groups: [Group!]!
+  groups: [Group!]
+
+  """List of variable's ids"""
+  variables: [String!]
 }
 
-type Group {
+type Variable {
   id: String!
   label: String
+  type: String!
   description: String
-  groups: [Group!]!
-  variables: [Variable!]!
+  enumerations: [Category!]
+  groups: [Group!]
 }
 
 type Domain {