diff --git a/client/angular.json b/client/angular.json
index 17efce44ec943e8de2e16019742c49a058247df6..3c6e06942e831b94ea0acd7276d679ce69329a44 100644
--- a/client/angular.json
+++ b/client/angular.json
@@ -37,7 +37,10 @@
             "scripts": [
               "node_modules/@fortawesome/fontawesome-free/js/all.js",
               "src/assets/samp.js"
-            ]
+            ],
+            "allowedCommonJsDependencies": [
+              "keycloak-js"
+           ]
           },
           "configurations": {
             "production": {
diff --git a/client/src/app/admin/admin-routing.module.ts b/client/src/app/admin/admin-routing.module.ts
index ceec43374f5fe60156ec88ad8cd8eac2e53eea95..192e2c5b6fb6e0e0b29c168ea33c1d7f0dd0a8d0 100644
--- a/client/src/app/admin/admin-routing.module.ts
+++ b/client/src/app/admin/admin-routing.module.ts
@@ -12,51 +12,15 @@ import { RouterModule, Routes } from '@angular/router';
 
 import { AdminComponent } from './admin.component';
 import { AdminAuthGuard } from './admin-auth.guard';
-import { InstanceListComponent } from './containers/instance/instance-list.component';
-import { NewInstanceComponent } from './containers/instance/new-instance.component';
-import { EditInstanceComponent } from './containers/instance/edit-instance.component';
-import { DatasetListComponent } from './containers/dataset/dataset-list.component';
-import { ConfigureInstanceComponent } from './containers/instance/configure-instance.component';
-import { GroupListComponent } from './containers/group/group-list.component';
-import { NewGroupComponent } from './containers/group/new-group.component';
-import { EditGroupComponent } from './containers/group/edit-group.component';
-import { NewDatasetComponent } from './containers/dataset/new-dataset.component';
-import { EditDatasetComponent } from './containers/dataset/edit-dataset.component';
-import { AttributeListComponent } from './containers/attribute/attribute-list.component';
-import { SurveyListComponent } from './containers/survey/survey-list.component';
-import { NewSurveyComponent } from './containers/survey/new-survey.component';
-import { EditSurveyComponent } from './containers/survey/edit-survey.component';
-import { DatabaseListComponent } from './containers/database/database-list.component';
-import { NewDatabaseComponent } from './containers/database/new-database.component';
-import { EditDatabaseComponent } from './containers/database/edit-database.component';
-import { SettingsComponent } from './containers/settings/settings.component';
 
 const routes: Routes = [
     { 
         path: '', component: AdminComponent, canActivate: [AdminAuthGuard], children: [
-            { path: '', redirectTo: 'instance-list', pathMatch: 'full' },
-            { path: 'instance-list', component: InstanceListComponent },
-            { path: 'new-instance', component: NewInstanceComponent },
-            { path: 'edit-instance/:iname', component: EditInstanceComponent },
-            { path: 'configure-instance/:iname', component: ConfigureInstanceComponent, children: 
-                [
-                    { path: '', component: DatasetListComponent },
-                    { path: 'group', component: GroupListComponent },
-                    { path: 'new-group', component: NewGroupComponent },
-                    { path: 'edit-group/:id', component: EditGroupComponent },
-                    { path: 'new-dataset', component: NewDatasetComponent },
-                    { path: 'edit-dataset/:dname', component: EditDatasetComponent },
-                    { path: 'configure-dataset/:dname', component: AttributeListComponent },
-                ]
-            },
-            { path: 'survey-list', component: SurveyListComponent },
-            { path: 'new-survey', component: NewSurveyComponent },
-            { path: 'edit-survey/:name', component: EditSurveyComponent },
-            { path: 'database-list', component: DatabaseListComponent },
-            { path: 'new-database', component: NewDatabaseComponent },
-            { path: 'edit-database/:id', component: EditDatabaseComponent },
-            { path: 'settings', component: SettingsComponent },
-            { path: 'settings/:select', component: SettingsComponent }
+            { path: '', redirectTo: 'instance/instance-list', pathMatch: 'full' },
+            { path: 'instance', loadChildren: () => import('./instance/instance.module').then(m => m.InstanceModule) },
+            { path: 'survey', loadChildren: () => import('./survey/survey.module').then(m => m.SurveyModule) },
+            { path: 'database', loadChildren: () => import('./database/database.module').then(m => m.DatabaseModule) },
+            { path: 'settings', loadChildren: () => import('./settings/settings.module').then(m => m.SettingsModule) }
         ]
     }
 ];
@@ -68,23 +32,5 @@ const routes: Routes = [
 export class AdminRoutingModule { }
 
 export const routedComponents = [
-    AdminComponent,
-    InstanceListComponent,
-    NewInstanceComponent,
-    EditInstanceComponent,
-    ConfigureInstanceComponent,
-    DatasetListComponent,
-    GroupListComponent,
-    NewGroupComponent,
-    EditGroupComponent,
-    NewDatasetComponent,
-    EditDatasetComponent,
-    AttributeListComponent,
-    SurveyListComponent,
-    NewSurveyComponent,
-    EditSurveyComponent,
-    DatabaseListComponent,
-    NewDatabaseComponent,
-    EditDatabaseComponent,
-    SettingsComponent
+    AdminComponent
 ];
diff --git a/client/src/app/instance/shared-search/detail/detail.module.ts b/client/src/app/admin/admin-shared/admin-shared.module.ts
similarity index 59%
rename from client/src/app/instance/shared-search/detail/detail.module.ts
rename to client/src/app/admin/admin-shared/admin-shared.module.ts
index af987eed26912d826161994901356c3edf6cd762..9b2e8c08bf694efa4634f5413e10176236ae5e20 100644
--- a/client/src/app/instance/shared-search/detail/detail.module.ts
+++ b/client/src/app/admin/admin-shared/admin-shared.module.ts
@@ -10,18 +10,24 @@
 import { NgModule } from '@angular/core';
 
 import { SharedModule } from 'src/app/shared/shared.module';
-import { DetailComponent } from './containers/detail.component';
-import { dummiesComponents } from './components';
-import { detailPipes } from './pipes';
+import { adminSharedComponents } from './components';
+import { adminPipes } from './pipes';
 
+/**
+ * @class
+ * @classdesc Home module.
+ */
 @NgModule({
     imports: [
         SharedModule
     ],
     declarations: [
-        DetailComponent,
-        dummiesComponents,
-        detailPipes
+        adminSharedComponents,
+        adminPipes
+    ],
+    exports: [
+        adminSharedComponents,
+        adminPipes
     ]
 })
-export class DetailModule { }
+export class AdminSharedModule { }
diff --git a/client/src/app/admin/components/shared/data-path-form-control.component.html b/client/src/app/admin/admin-shared/components/data-path-form-control.component.html
similarity index 100%
rename from client/src/app/admin/components/shared/data-path-form-control.component.html
rename to client/src/app/admin/admin-shared/components/data-path-form-control.component.html
diff --git a/client/src/app/admin/components/shared/data-path-form-control.component.ts b/client/src/app/admin/admin-shared/components/data-path-form-control.component.ts
similarity index 97%
rename from client/src/app/admin/components/shared/data-path-form-control.component.ts
rename to client/src/app/admin/admin-shared/components/data-path-form-control.component.ts
index 00675df16e4ebf6163c7c1a71ab98ad6e53bfee1..9ff36dfbe649209523f6e833a2131ca22dddc901 100644
--- a/client/src/app/admin/components/shared/data-path-form-control.component.ts
+++ b/client/src/app/admin/admin-shared/components/data-path-form-control.component.ts
@@ -50,7 +50,7 @@ export class DataPathFormControlComponent {
         if (fileInfo.name === '..') {
             this.fileExplorerPath = this.fileExplorerPath.substr(0, this.fileExplorerPath.lastIndexOf("/"));
         } else {
-            this.fileExplorerPath += '/' + fileInfo.name;
+            this.fileExplorerPath += `/${fileInfo.name}`;
         }
         this.fileExplorerPristine = false;
         this.loadRootDirectory.emit(this.fileExplorerPath);
diff --git a/client/src/app/admin/components/shared/delete-btn.component.html b/client/src/app/admin/admin-shared/components/delete-btn.component.html
similarity index 100%
rename from client/src/app/admin/components/shared/delete-btn.component.html
rename to client/src/app/admin/admin-shared/components/delete-btn.component.html
diff --git a/client/src/app/admin/components/shared/delete-btn.component.ts b/client/src/app/admin/admin-shared/components/delete-btn.component.ts
similarity index 100%
rename from client/src/app/admin/components/shared/delete-btn.component.ts
rename to client/src/app/admin/admin-shared/components/delete-btn.component.ts
diff --git a/client/src/app/admin/components/shared/file-select-form-control.component.html b/client/src/app/admin/admin-shared/components/file-select-form-control.component.html
similarity index 100%
rename from client/src/app/admin/components/shared/file-select-form-control.component.html
rename to client/src/app/admin/admin-shared/components/file-select-form-control.component.html
diff --git a/client/src/app/admin/components/shared/file-select-form-control.component.ts b/client/src/app/admin/admin-shared/components/file-select-form-control.component.ts
similarity index 94%
rename from client/src/app/admin/components/shared/file-select-form-control.component.ts
rename to client/src/app/admin/admin-shared/components/file-select-form-control.component.ts
index 7192d97fb8f10cbcb41c1294247e93e290e3b920..4c0e5cc9a01a38609076b6c3444be8df9027a059 100644
--- a/client/src/app/admin/components/shared/file-select-form-control.component.ts
+++ b/client/src/app/admin/admin-shared/components/file-select-form-control.component.ts
@@ -68,7 +68,7 @@ export class FileSelectFormControlComponent implements OnChanges {
         if (fileInfo.name === '..') {
             this.fileExplorerPath = this.fileExplorerPath.substr(0, this.fileExplorerPath.lastIndexOf("/"));
         } else {
-            this.fileExplorerPath += '/' + fileInfo.name;
+            this.fileExplorerPath += `/${fileInfo.name}`;
         }
         this.loadRootDirectory.emit(this.fileExplorerPath);
     }
@@ -76,9 +76,9 @@ export class FileSelectFormControlComponent implements OnChanges {
     buildFilePath(fileInfo: FileInfo) {
         let fileSelected = '';
         if (this.fileExplorerPath !== '') {
-            fileSelected += this.fileExplorerPath + '/';
+            fileSelected += `${this.fileExplorerPath}/`;
         }
-        return fileSelected + fileInfo.name;
+        return `${fileSelected}${fileInfo.name}`;
     }
 
     checkFileSelected(fileInfo: FileInfo) {
diff --git a/client/src/app/admin/components/shared/index.ts b/client/src/app/admin/admin-shared/components/index.ts
similarity index 93%
rename from client/src/app/admin/components/shared/index.ts
rename to client/src/app/admin/admin-shared/components/index.ts
index 90937726cad9c4f7e83fc44b7506b46ab1ee1c6e..57eea4f1f30fd806b736d01c44a1129aacf25b51 100644
--- a/client/src/app/admin/components/shared/index.ts
+++ b/client/src/app/admin/admin-shared/components/index.ts
@@ -11,7 +11,7 @@ import { DeleteBtnComponent } from './delete-btn.component';
 import { DataPathFormControlComponent } from './data-path-form-control.component';
 import { FileSelectFormControlComponent } from './file-select-form-control.component';
 
-export const sharedComponents = [
+export const adminSharedComponents = [
     DeleteBtnComponent,
     DataPathFormControlComponent,
     FileSelectFormControlComponent
diff --git a/client/src/app/admin/pipes/format-file-size.pipe.ts b/client/src/app/admin/admin-shared/pipes/format-file-size.pipe.ts
similarity index 100%
rename from client/src/app/admin/pipes/format-file-size.pipe.ts
rename to client/src/app/admin/admin-shared/pipes/format-file-size.pipe.ts
diff --git a/client/src/app/admin/pipes/index.ts b/client/src/app/admin/admin-shared/pipes/index.ts
similarity index 100%
rename from client/src/app/admin/pipes/index.ts
rename to client/src/app/admin/admin-shared/pipes/index.ts
diff --git a/client/src/app/admin/admin.component.ts b/client/src/app/admin/admin.component.ts
index c66057c76e647be6b2d1d45557aa01eb6aa2fef7..2885ae4b6044d59ec72bcf3b8f126317965d6f3d 100644
--- a/client/src/app/admin/admin.component.ts
+++ b/client/src/app/admin/admin.component.ts
@@ -33,9 +33,9 @@ import { AppConfigService } from 'src/app/app-config.service';
 export class AdminComponent implements OnInit {
     public favIcon: HTMLLinkElement = document.querySelector('#favicon');
     public links = [
-        { label: 'Instances', icon: 'fas fa-object-group', routerLink: 'instance-list' },
-        { label: 'Surveys', icon: 'fas fa-table', routerLink: 'survey-list'},
-        { label: 'Databases', icon: 'fas fa-database', routerLink: 'database-list'},
+        { label: 'Instances', icon: 'fas fa-object-group', routerLink: 'instance/instance-list' },
+        { label: 'Surveys', icon: 'fas fa-table', routerLink: 'survey/survey-list'},
+        { label: 'Databases', icon: 'fas fa-database', routerLink: 'database/database-list'},
         { label: 'Settings', icon: 'fas fa-wrench', routerLink: 'settings'}
     ];
     public isAuthenticated: Observable<boolean>;
diff --git a/client/src/app/admin/admin.module.ts b/client/src/app/admin/admin.module.ts
index dbfb077c8902cd5512bae55ff760a372d9ec1995..2abe5c323fbcf57b272049dc2bf80603f607ac1f 100644
--- a/client/src/app/admin/admin.module.ts
+++ b/client/src/app/admin/admin.module.ts
@@ -10,19 +10,17 @@
 import { NgModule } from '@angular/core';
 
 import { SharedModule } from 'src/app/shared/shared.module';
+import { AdminSharedModule } from './admin-shared/admin-shared.module';
 import { AdminRoutingModule, routedComponents } from './admin-routing.module';
-import { dummiesComponents } from './components';
-import { adminPipes } from './pipes';
 
 @NgModule({
     imports: [
         SharedModule,
+        AdminSharedModule,
         AdminRoutingModule
     ],
     declarations: [
-        routedComponents,
-        dummiesComponents,
-        adminPipes
+        routedComponents
     ]
 })
 export class AdminModule { }
diff --git a/client/src/app/admin/components/database/database-form.component.html b/client/src/app/admin/database/components/database-form.component.html
similarity index 100%
rename from client/src/app/admin/components/database/database-form.component.html
rename to client/src/app/admin/database/components/database-form.component.html
diff --git a/client/src/app/admin/components/database/database-form.component.ts b/client/src/app/admin/database/components/database-form.component.ts
similarity index 100%
rename from client/src/app/admin/components/database/database-form.component.ts
rename to client/src/app/admin/database/components/database-form.component.ts
diff --git a/client/src/app/admin/components/database/database-table.component.html b/client/src/app/admin/database/components/database-table.component.html
similarity index 96%
rename from client/src/app/admin/components/database/database-table.component.html
rename to client/src/app/admin/database/components/database-table.component.html
index 4d2658f9a635b46033a1f4eba1d69be7f5e0664b..e44c48b3db8d653a8edfcc78c68df188c50889ea 100644
--- a/client/src/app/admin/components/database/database-table.component.html
+++ b/client/src/app/admin/database/components/database-table.component.html
@@ -27,7 +27,7 @@
                 <td class="align-middle">*******</td>
                 <td class="align-middle">{{ getNbSurveyByDatabase(database.id) }}</td>
                 <td class="align-middle">
-                    <a title="Edit this database" routerLink="/admin/edit-database/{{database.id}}" class="btn btn-outline-primary">
+                    <a title="Edit this database" routerLink="/admin/database/edit-database/{{database.id}}" class="btn btn-outline-primary">
                         <span class="fas fa-edit"></span>
                     </a>
                 </td>
diff --git a/client/src/app/admin/components/database/database-table.component.ts b/client/src/app/admin/database/components/database-table.component.ts
similarity index 100%
rename from client/src/app/admin/components/database/database-table.component.ts
rename to client/src/app/admin/database/components/database-table.component.ts
diff --git a/client/src/app/admin/components/database/index.ts b/client/src/app/admin/database/components/index.ts
similarity index 92%
rename from client/src/app/admin/components/database/index.ts
rename to client/src/app/admin/database/components/index.ts
index de53851212fa7764bb2cb2bc8288b9479cce6be1..fd0d4fdac62b752373fec3a1cd576441d79fc587 100644
--- a/client/src/app/admin/components/database/index.ts
+++ b/client/src/app/admin/database/components/index.ts
@@ -10,7 +10,7 @@
 import { DatabaseTableComponent } from "./database-table.component";
 import { DatabaseFormComponent } from "./database-form.component";
 
-export const databaseComponents = [
+export const dummiesComponents = [
     DatabaseTableComponent,
     DatabaseFormComponent
 ];
diff --git a/client/src/app/admin/containers/database/database-list.component.html b/client/src/app/admin/database/containers/database-list.component.html
similarity index 93%
rename from client/src/app/admin/containers/database/database-list.component.html
rename to client/src/app/admin/database/containers/database-list.component.html
index 4967343e4077b12de7897da17d6867e79b22243c..e5409f65a3e17a55efebb6dca1239fec61b2d256 100644
--- a/client/src/app/admin/containers/database/database-list.component.html
+++ b/client/src/app/admin/database/containers/database-list.component.html
@@ -10,7 +10,7 @@
     <ng-container *ngIf="(surveyListIsLoaded | async) && (databaseListIsLoaded | async)">
         <div class="row">
             <div class="col-12">
-                <button title="Add a new database" class="btn btn-outline-success float-right" routerLink="/admin/new-database">
+                <button title="Add a new database" class="btn btn-outline-success float-right" routerLink="/admin/database/new-database">
                     <span class="fas fa-plus"></span> New database
                 </button>
             </div>
diff --git a/client/src/app/admin/containers/database/database-list.component.ts b/client/src/app/admin/database/containers/database-list.component.ts
similarity index 100%
rename from client/src/app/admin/containers/database/database-list.component.ts
rename to client/src/app/admin/database/containers/database-list.component.ts
diff --git a/client/src/app/admin/containers/database/edit-database.component.html b/client/src/app/admin/database/containers/edit-database.component.html
similarity index 87%
rename from client/src/app/admin/containers/database/edit-database.component.html
rename to client/src/app/admin/database/containers/edit-database.component.html
index 933cd5356a66155eaf81c5b6863edd15c31b4078..3a8130bd156228a54dc205c96d329c1d8eb5f193 100644
--- a/client/src/app/admin/containers/database/edit-database.component.html
+++ b/client/src/app/admin/database/containers/edit-database.component.html
@@ -1,7 +1,7 @@
 <div class="container-fluid">
     <nav aria-label="breadcrumb">
         <ol class="breadcrumb">
-            <li class="breadcrumb-item"><a routerLink="/admin/database-list">Databases</a></li>
+            <li class="breadcrumb-item"><a routerLink="/admin/database/database-list">Databases</a></li>
             <li *ngIf="(databaseListIsLoaded | async)" class="breadcrumb-item active" aria-current="page">Edit database {{ (database | async).label }}</li>
         </ol>
     </nav>
@@ -17,7 +17,7 @@
                     <span class="fa fa-database"></span> Update database information
                 </button>
                 &nbsp;
-                <a routerLink="/admin/database-list" class="btn btn-danger">Cancel</a>
+                <a routerLink="/admin/database/database-list" class="btn btn-danger">Cancel</a>
             </app-database-form>
         </div>
     </div>
diff --git a/client/src/app/admin/containers/database/edit-database.component.ts b/client/src/app/admin/database/containers/edit-database.component.ts
similarity index 100%
rename from client/src/app/admin/containers/database/edit-database.component.ts
rename to client/src/app/admin/database/containers/edit-database.component.ts
diff --git a/client/src/app/admin/containers/database/new-database.component.html b/client/src/app/admin/database/containers/new-database.component.html
similarity index 83%
rename from client/src/app/admin/containers/database/new-database.component.html
rename to client/src/app/admin/database/containers/new-database.component.html
index 0ba8b097f20bb96bc36101062448818bff533a9d..7f30361b4bc0a3ec8f6ebdcd1cfe71faa0b4f867 100644
--- a/client/src/app/admin/containers/database/new-database.component.html
+++ b/client/src/app/admin/database/containers/new-database.component.html
@@ -1,7 +1,7 @@
 <div class="container-fluid">
     <nav aria-label="breadcrumb">
         <ol class="breadcrumb">
-            <li class="breadcrumb-item"><a routerLink="/admin/database-list">Databases</a></li>
+            <li class="breadcrumb-item"><a routerLink="/admin/database/database-list">Databases</a></li>
             <li class="breadcrumb-item active" aria-current="page">New database</li>
         </ol>
     </nav>
@@ -15,7 +15,7 @@
                     <span class="fa fa-database"></span> Add the new database
                 </button>
                 &nbsp;
-                <a routerLink="/admin/database-list" type="button" class="btn btn-danger">Cancel</a>
+                <a routerLink="/admin/database/database-list" type="button" class="btn btn-danger">Cancel</a>
             </app-database-form>
         </div>
     </div>
diff --git a/client/src/app/admin/containers/database/new-database.component.ts b/client/src/app/admin/database/containers/new-database.component.ts
similarity index 100%
rename from client/src/app/admin/containers/database/new-database.component.ts
rename to client/src/app/admin/database/containers/new-database.component.ts
diff --git a/client/src/app/admin/database/database-routing.module.ts b/client/src/app/admin/database/database-routing.module.ts
new file mode 100644
index 0000000000000000000000000000000000000000..ee97b267073cc1e88ecfde8c725d9de6647dd326
--- /dev/null
+++ b/client/src/app/admin/database/database-routing.module.ts
@@ -0,0 +1,37 @@
+/**
+ * This file is part of Anis Client.
+ *
+ * @copyright Laboratoire d'Astrophysique de Marseille / CNRS
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+import { NgModule } from '@angular/core';
+import { Routes, RouterModule } from '@angular/router';
+
+import { DatabaseListComponent } from './containers/database-list.component';
+import { NewDatabaseComponent } from './containers/new-database.component';
+import { EditDatabaseComponent } from './containers/edit-database.component';
+
+const routes: Routes = [
+    { path: 'database-list', component: DatabaseListComponent },
+    { path: 'new-database', component: NewDatabaseComponent },
+    { path: 'edit-database/:id', component: EditDatabaseComponent }
+];
+
+/**
+ * @class
+ * @classdesc Database routing module.
+ */
+@NgModule({
+    imports: [RouterModule.forChild(routes)],
+    exports: [RouterModule]
+})
+export class DatabaseRoutingModule { }
+
+export const routedComponents = [
+    DatabaseListComponent,
+    NewDatabaseComponent,
+    EditDatabaseComponent
+];
diff --git a/client/src/app/admin/database/database.module.ts b/client/src/app/admin/database/database.module.ts
new file mode 100644
index 0000000000000000000000000000000000000000..ec6dbc05108c71ee53dee4e74885317749c74683
--- /dev/null
+++ b/client/src/app/admin/database/database.module.ts
@@ -0,0 +1,33 @@
+/**
+ * This file is part of Anis Client.
+ *
+ * @copyright Laboratoire d'Astrophysique de Marseille / CNRS
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+import { NgModule } from '@angular/core';
+
+import { SharedModule } from 'src/app/shared/shared.module';
+import { DatabaseRoutingModule, routedComponents } from './database-routing.module';
+import { dummiesComponents } from './components';
+
+import { AdminSharedModule } from '../admin-shared/admin-shared.module';
+
+/**
+ * @class
+ * @classdesc Database module.
+ */
+@NgModule({
+    imports: [
+        SharedModule,
+        DatabaseRoutingModule,
+        AdminSharedModule
+    ],
+    declarations: [
+        routedComponents,
+        dummiesComponents
+    ]
+})
+export class DatabaseModule { }
diff --git a/client/src/app/admin/components/instance/design-form-group.component.html b/client/src/app/admin/instance/components/design-form-group.component.html
similarity index 100%
rename from client/src/app/admin/components/instance/design-form-group.component.html
rename to client/src/app/admin/instance/components/design-form-group.component.html
diff --git a/client/src/app/admin/components/instance/design-form-group.component.ts b/client/src/app/admin/instance/components/design-form-group.component.ts
similarity index 100%
rename from client/src/app/admin/components/instance/design-form-group.component.ts
rename to client/src/app/admin/instance/components/design-form-group.component.ts
diff --git a/client/src/app/admin/components/instance/documentation-form-group.component.html b/client/src/app/admin/instance/components/documentation-form-group.component.html
similarity index 100%
rename from client/src/app/admin/components/instance/documentation-form-group.component.html
rename to client/src/app/admin/instance/components/documentation-form-group.component.html
diff --git a/client/src/app/admin/components/instance/documentation-form-group.component.ts b/client/src/app/admin/instance/components/documentation-form-group.component.ts
similarity index 100%
rename from client/src/app/admin/components/instance/documentation-form-group.component.ts
rename to client/src/app/admin/instance/components/documentation-form-group.component.ts
diff --git a/client/src/app/admin/components/instance/home-form-group.component.html b/client/src/app/admin/instance/components/home-form-group.component.html
similarity index 100%
rename from client/src/app/admin/components/instance/home-form-group.component.html
rename to client/src/app/admin/instance/components/home-form-group.component.html
diff --git a/client/src/app/admin/components/instance/home-form-group.component.ts b/client/src/app/admin/instance/components/home-form-group.component.ts
similarity index 100%
rename from client/src/app/admin/components/instance/home-form-group.component.ts
rename to client/src/app/admin/instance/components/home-form-group.component.ts
diff --git a/client/src/app/admin/components/instance/index.ts b/client/src/app/admin/instance/components/index.ts
similarity index 86%
rename from client/src/app/admin/components/instance/index.ts
rename to client/src/app/admin/instance/components/index.ts
index f3c08b32be425bd190195ef569961e962ca9a188..7dc39ff5ba6b4dedde8a7b374a59b1c0a2f987af 100644
--- a/client/src/app/admin/components/instance/index.ts
+++ b/client/src/app/admin/instance/components/index.ts
@@ -8,16 +8,14 @@
  */
 
 import { InstanceCardComponent } from './instance-card.component';
-import { InstanceButtonsComponent } from './instance-buttons.component';
 import { InstanceFormComponent } from './instance-form.component';
 import { DesignFormGroupComponent } from './design-form-group.component';
 import { HomeFormGroupComponent } from './home-form-group.component';
 import { SearchFormGroupComponent } from './search-form-group.component';
 import { DocumentationFormGroupComponent } from './documentation-form-group.component';
 
-export const instanceComponents = [
+export const dummiesComponents = [
     InstanceCardComponent,
-    InstanceButtonsComponent,
     InstanceFormComponent,
     DesignFormGroupComponent,
     HomeFormGroupComponent,
diff --git a/client/src/app/admin/components/instance/instance-card.component.html b/client/src/app/admin/instance/components/instance-card.component.html
similarity index 74%
rename from client/src/app/admin/components/instance/instance-card.component.html
rename to client/src/app/admin/instance/components/instance-card.component.html
index 9c9aa4fa036fb5da6a51b7fd7368e7cff0745579..c46f8db3c172b5c183c97353293e50e76afc2d26 100644
--- a/client/src/app/admin/components/instance/instance-card.component.html
+++ b/client/src/app/admin/instance/components/instance-card.component.html
@@ -7,11 +7,11 @@
         </ul>
     </div>
     <div class="card-footer bg-transparent text-right">
-        <a routerLink="/admin/configure-instance/{{instance.name}}" class="btn btn-outline-primary" title="Configure this instance">
+        <a routerLink="/admin/instance/configure-instance/{{instance.name}}" class="btn btn-outline-primary" title="Configure this instance">
             <span class="fas fa-cog"></span>
         </a>
         &nbsp;
-        <a title="Edit this instance" routerLink="/admin/edit-instance/{{instance.name}}" class="btn btn-outline-primary">
+        <a title="Edit this instance" routerLink="/admin/instance/edit-instance/{{instance.name}}" class="btn btn-outline-primary">
             <span class="fas fa-edit"></span>
         </a>
         &nbsp;
diff --git a/client/src/app/admin/components/instance/instance-card.component.scss b/client/src/app/admin/instance/components/instance-card.component.scss
similarity index 100%
rename from client/src/app/admin/components/instance/instance-card.component.scss
rename to client/src/app/admin/instance/components/instance-card.component.scss
diff --git a/client/src/app/admin/components/instance/instance-card.component.ts b/client/src/app/admin/instance/components/instance-card.component.ts
similarity index 100%
rename from client/src/app/admin/components/instance/instance-card.component.ts
rename to client/src/app/admin/instance/components/instance-card.component.ts
diff --git a/client/src/app/admin/components/instance/instance-form.component.html b/client/src/app/admin/instance/components/instance-form.component.html
similarity index 100%
rename from client/src/app/admin/components/instance/instance-form.component.html
rename to client/src/app/admin/instance/components/instance-form.component.html
diff --git a/client/src/app/admin/components/instance/instance-form.component.ts b/client/src/app/admin/instance/components/instance-form.component.ts
similarity index 97%
rename from client/src/app/admin/components/instance/instance-form.component.ts
rename to client/src/app/admin/instance/components/instance-form.component.ts
index 7ff24f3c62be53b8583e0328b4fec06f86ebd9db..d93bb0bd4080684338696921ffd07af8d9ddeebc 100644
--- a/client/src/app/admin/components/instance/instance-form.component.ts
+++ b/client/src/app/admin/instance/components/instance-form.component.ts
@@ -83,7 +83,7 @@ the fast implementation of a project data exchange platform in a dedicated infor
     }
 
     onChangeSelectFile(path: string) {
-        this.loadRootDirectory.emit(this.form.controls.data_path.value + path);
+        this.loadRootDirectory.emit(`${this.form.controls.data_path.value}${path}`);
     }
 
     isDataPathEmpty() {
diff --git a/client/src/app/admin/components/instance/search-form-group.component.html b/client/src/app/admin/instance/components/search-form-group.component.html
similarity index 100%
rename from client/src/app/admin/components/instance/search-form-group.component.html
rename to client/src/app/admin/instance/components/search-form-group.component.html
diff --git a/client/src/app/admin/components/instance/search-form-group.component.ts b/client/src/app/admin/instance/components/search-form-group.component.ts
similarity index 100%
rename from client/src/app/admin/components/instance/search-form-group.component.ts
rename to client/src/app/admin/instance/components/search-form-group.component.ts
diff --git a/client/src/app/admin/containers/instance/configure-instance.component.html b/client/src/app/admin/instance/containers/configure-instance.component.html
similarity index 100%
rename from client/src/app/admin/containers/instance/configure-instance.component.html
rename to client/src/app/admin/instance/containers/configure-instance.component.html
diff --git a/client/src/app/admin/containers/instance/configure-instance.component.ts b/client/src/app/admin/instance/containers/configure-instance.component.ts
similarity index 100%
rename from client/src/app/admin/containers/instance/configure-instance.component.ts
rename to client/src/app/admin/instance/containers/configure-instance.component.ts
diff --git a/client/src/app/admin/containers/instance/edit-instance.component.html b/client/src/app/admin/instance/containers/edit-instance.component.html
similarity index 89%
rename from client/src/app/admin/containers/instance/edit-instance.component.html
rename to client/src/app/admin/instance/containers/edit-instance.component.html
index cdd51e099a38c6ae296a0598b5d7691bcbc654da..1a8c5740c24e9a663c8f950b5ea67a86f448e9cc 100644
--- a/client/src/app/admin/containers/instance/edit-instance.component.html
+++ b/client/src/app/admin/instance/containers/edit-instance.component.html
@@ -1,7 +1,7 @@
 <div class="container-fluid">
     <nav aria-label="breadcrumb">
         <ol class="breadcrumb">
-            <li class="breadcrumb-item"><a routerLink="/admin/instance-list">Instances</a></li>
+            <li class="breadcrumb-item"><a routerLink="/admin/instance/instance-list">Instances</a></li>
             <li class="breadcrumb-item active" aria-current="page">Edit instance {{ (instance | async).name }}</li>
         </ol>
     </nav>
@@ -22,7 +22,7 @@
                     <span class="fa fa-database"></span> Update instance information
                 </button>
                 &nbsp;
-                <a routerLink="/admin/instance-list" class="btn btn-danger">Cancel</a>
+                <a routerLink="/admin/instance/instance-list" class="btn btn-danger">Cancel</a>
             </app-instance-form>
         </div>
     </div>
diff --git a/client/src/app/admin/containers/instance/edit-instance.component.ts b/client/src/app/admin/instance/containers/edit-instance.component.ts
similarity index 100%
rename from client/src/app/admin/containers/instance/edit-instance.component.ts
rename to client/src/app/admin/instance/containers/edit-instance.component.ts
diff --git a/client/src/app/admin/containers/instance/instance-list.component.html b/client/src/app/admin/instance/containers/instance-list.component.html
similarity index 84%
rename from client/src/app/admin/containers/instance/instance-list.component.html
rename to client/src/app/admin/instance/containers/instance-list.component.html
index 307c004ec8272907180898ccea881bf510482c0f..ce9430bf351076a1e10497e944e64f45e2734659 100644
--- a/client/src/app/admin/containers/instance/instance-list.component.html
+++ b/client/src/app/admin/instance/containers/instance-list.component.html
@@ -15,7 +15,7 @@
             </app-instance-card>
         </div>
         <div class="col mb-3 h-100 d-table">
-            <div routerLink="/admin/new-instance" class="card card-add d-table-cell align-middle pointer" title="Add a new instance">
+            <div routerLink="/admin/instance/new-instance" class="card card-add d-table-cell align-middle pointer" title="Add a new instance">
                 <div class="card-body text-center">
                     <span class="fas fa-plus fa-4x text-light"></span>
                 </div>
diff --git a/client/src/app/admin/containers/instance/instance-list.component.scss b/client/src/app/admin/instance/containers/instance-list.component.scss
similarity index 100%
rename from client/src/app/admin/containers/instance/instance-list.component.scss
rename to client/src/app/admin/instance/containers/instance-list.component.scss
diff --git a/client/src/app/admin/containers/instance/instance-list.component.ts b/client/src/app/admin/instance/containers/instance-list.component.ts
similarity index 100%
rename from client/src/app/admin/containers/instance/instance-list.component.ts
rename to client/src/app/admin/instance/containers/instance-list.component.ts
diff --git a/client/src/app/admin/containers/instance/new-instance.component.html b/client/src/app/admin/instance/containers/new-instance.component.html
similarity index 88%
rename from client/src/app/admin/containers/instance/new-instance.component.html
rename to client/src/app/admin/instance/containers/new-instance.component.html
index 58d637cd740c2a2e9a1e67cefdc99ee0dab098c1..5566a5170881a0fc25982b0a116e54e2ff195578 100644
--- a/client/src/app/admin/containers/instance/new-instance.component.html
+++ b/client/src/app/admin/instance/containers/new-instance.component.html
@@ -1,7 +1,7 @@
 <div class="container-fluid">
     <nav aria-label="breadcrumb">
         <ol class="breadcrumb">
-            <li class="breadcrumb-item"><a routerLink="/admin/instance-list">Instances</a></li>
+            <li class="breadcrumb-item"><a routerLink="/admin/instance/instance-list">Instances</a></li>
             <li class="breadcrumb-item active" aria-current="page">New instance</li>
         </ol>
     </nav>
@@ -21,7 +21,7 @@
                     <span class="fa fa-database"></span> Add the new instance
                 </button>
                 &nbsp;
-                <a routerLink="/admin/instance-list" class="btn btn-danger">Cancel</a>
+                <a routerLink="/admin/instance/instance-list" class="btn btn-danger">Cancel</a>
             </app-instance-form>
         </div>
     </div>
diff --git a/client/src/app/admin/containers/instance/new-instance.component.ts b/client/src/app/admin/instance/containers/new-instance.component.ts
similarity index 100%
rename from client/src/app/admin/containers/instance/new-instance.component.ts
rename to client/src/app/admin/instance/containers/new-instance.component.ts
diff --git a/client/src/app/admin/components/attribute/add-attribute.component.html b/client/src/app/admin/instance/dataset/components/attribute/add-attribute.component.html
similarity index 100%
rename from client/src/app/admin/components/attribute/add-attribute.component.html
rename to client/src/app/admin/instance/dataset/components/attribute/add-attribute.component.html
diff --git a/client/src/app/admin/components/attribute/add-attribute.component.ts b/client/src/app/admin/instance/dataset/components/attribute/add-attribute.component.ts
similarity index 100%
rename from client/src/app/admin/components/attribute/add-attribute.component.ts
rename to client/src/app/admin/instance/dataset/components/attribute/add-attribute.component.ts
diff --git a/client/src/app/admin/components/attribute/criteria/generate-option-list.component.html b/client/src/app/admin/instance/dataset/components/attribute/criteria/generate-option-list.component.html
similarity index 64%
rename from client/src/app/admin/components/attribute/criteria/generate-option-list.component.html
rename to client/src/app/admin/instance/dataset/components/attribute/criteria/generate-option-list.component.html
index c84d0ff801abcb5698068e4b3ca1d9fa8f6b2de3..e6736089a768c9736082b6c3a10c7f718e6e3b7d 100644
--- a/client/src/app/admin/components/attribute/criteria/generate-option-list.component.html
+++ b/client/src/app/admin/instance/dataset/components/attribute/criteria/generate-option-list.component.html
@@ -1,5 +1,8 @@
 <div class="text-center mt-2">
-    <button (click)="openModal(template); $event.stopPropagation()" class="btn btn-outline-primary">Generate values</button>
+    <button (click)="openModal(template); $event.stopPropagation()" class="btn btn-outline-primary">
+        <span *ngIf="optionListIsEmpty">Generate values</span>
+        <span *ngIf="!optionListIsEmpty">Regenerate values</span>
+    </button>
 </div>  
 
 <ng-template #template>
@@ -13,7 +16,10 @@
             <ul>
                 <li *ngFor="let attributeDistinct of attributeDistinctList">{{ attributeDistinct }}</li>
             </ul>
-            <p>Are you sure you want to generate option list with this attribute distinct list ?</p>
+            <p>
+                Are you sure you want to generate option list with this attribute distinct list ?<br>
+                <span *ngIf="!optionListIsEmpty" class="text-danger font-italic">Warning: The current list will be replaced by the new !</span>
+            </p>
             <p>
                 <button (click)="modalRef.hide()" class="btn btn-outline-danger">No</button>
                 &nbsp;
diff --git a/client/src/app/admin/components/attribute/criteria/generate-option-list.component.ts b/client/src/app/admin/instance/dataset/components/attribute/criteria/generate-option-list.component.ts
similarity index 94%
rename from client/src/app/admin/components/attribute/criteria/generate-option-list.component.ts
rename to client/src/app/admin/instance/dataset/components/attribute/criteria/generate-option-list.component.ts
index cc0899ce9fea358fc0b06e4a8fc576a06518e951..c9303d5a3a340b21e3b15e136fddddfb93bda111 100644
--- a/client/src/app/admin/components/attribute/criteria/generate-option-list.component.ts
+++ b/client/src/app/admin/instance/dataset/components/attribute/criteria/generate-option-list.component.ts
@@ -8,6 +8,7 @@
  */
 
 import { Component, ChangeDetectionStrategy, Input, Output, EventEmitter, TemplateRef } from '@angular/core';
+import { FormArray } from '@angular/forms';
 
 import { BsModalService } from 'ngx-bootstrap/modal';
 import { BsModalRef } from 'ngx-bootstrap/modal/bs-modal-ref.service';
@@ -18,6 +19,7 @@ import { BsModalRef } from 'ngx-bootstrap/modal/bs-modal-ref.service';
     changeDetection: ChangeDetectionStrategy.OnPush
 })
 export class GenerateOptionListComponent {
+    @Input() optionListIsEmpty: boolean;
     @Input() attributeDistinctList: string[];
     @Input() attributeDistinctListIsLoading: boolean;
     @Input() attributeDistinctListIsLoaded: boolean;
diff --git a/client/src/app/admin/components/attribute/criteria/index.ts b/client/src/app/admin/instance/dataset/components/attribute/criteria/index.ts
similarity index 100%
rename from client/src/app/admin/components/attribute/criteria/index.ts
rename to client/src/app/admin/instance/dataset/components/attribute/criteria/index.ts
diff --git a/client/src/app/admin/components/attribute/criteria/option-form.component.html b/client/src/app/admin/instance/dataset/components/attribute/criteria/option-form.component.html
similarity index 100%
rename from client/src/app/admin/components/attribute/criteria/option-form.component.html
rename to client/src/app/admin/instance/dataset/components/attribute/criteria/option-form.component.html
diff --git a/client/src/app/admin/components/attribute/criteria/option-form.component.scss b/client/src/app/admin/instance/dataset/components/attribute/criteria/option-form.component.scss
similarity index 100%
rename from client/src/app/admin/components/attribute/criteria/option-form.component.scss
rename to client/src/app/admin/instance/dataset/components/attribute/criteria/option-form.component.scss
diff --git a/client/src/app/admin/components/attribute/criteria/option-form.component.ts b/client/src/app/admin/instance/dataset/components/attribute/criteria/option-form.component.ts
similarity index 100%
rename from client/src/app/admin/components/attribute/criteria/option-form.component.ts
rename to client/src/app/admin/instance/dataset/components/attribute/criteria/option-form.component.ts
diff --git a/client/src/app/admin/components/attribute/criteria/option-list.component.html b/client/src/app/admin/instance/dataset/components/attribute/criteria/option-list.component.html
similarity index 95%
rename from client/src/app/admin/components/attribute/criteria/option-list.component.html
rename to client/src/app/admin/instance/dataset/components/attribute/criteria/option-list.component.html
index 138c2da03a2d2ec57b1f7a52910a6b985a481848..d5fd3e4a89043f312dada580f2f88409c8afe847 100644
--- a/client/src/app/admin/components/attribute/criteria/option-list.component.html
+++ b/client/src/app/admin/instance/dataset/components/attribute/criteria/option-list.component.html
@@ -11,7 +11,7 @@
 </app-option-form>
 
 <app-generate-option-list 
-    *ngIf="form.controls.length === 0"
+    [optionListIsEmpty]="form.length === 0"
     [attributeDistinctList]="attributeDistinctList"
     [attributeDistinctListIsLoading]="attributeDistinctListIsLoading"
     [attributeDistinctListIsLoaded]="attributeDistinctListIsLoaded"
diff --git a/client/src/app/admin/components/attribute/criteria/option-list.component.ts b/client/src/app/admin/instance/dataset/components/attribute/criteria/option-list.component.ts
similarity index 98%
rename from client/src/app/admin/components/attribute/criteria/option-list.component.ts
rename to client/src/app/admin/instance/dataset/components/attribute/criteria/option-list.component.ts
index c3e643a5a7c5cf9b145970aeb5853227a86f1139..bcda7932e5606232d4eb0a448c307156c8ff059c 100644
--- a/client/src/app/admin/components/attribute/criteria/option-list.component.ts
+++ b/client/src/app/admin/instance/dataset/components/attribute/criteria/option-list.component.ts
@@ -61,6 +61,7 @@ export class OptionListComponent implements OnInit {
     }
 
     generateOptionList(attributeDistinctList: string[]) {
+        this.form.clear();
         for (let i = 0; i < attributeDistinctList.length; i++) {
             const optionForm = this.buildFormGroup();
             optionForm.patchValue({
diff --git a/client/src/app/admin/components/attribute/criteria/table-criteria.component.html b/client/src/app/admin/instance/dataset/components/attribute/criteria/table-criteria.component.html
similarity index 100%
rename from client/src/app/admin/components/attribute/criteria/table-criteria.component.html
rename to client/src/app/admin/instance/dataset/components/attribute/criteria/table-criteria.component.html
diff --git a/client/src/app/admin/components/attribute/criteria/table-criteria.component.ts b/client/src/app/admin/instance/dataset/components/attribute/criteria/table-criteria.component.ts
similarity index 100%
rename from client/src/app/admin/components/attribute/criteria/table-criteria.component.ts
rename to client/src/app/admin/instance/dataset/components/attribute/criteria/table-criteria.component.ts
diff --git a/client/src/app/admin/components/attribute/criteria/tr-criteria.component.html b/client/src/app/admin/instance/dataset/components/attribute/criteria/tr-criteria.component.html
similarity index 100%
rename from client/src/app/admin/components/attribute/criteria/tr-criteria.component.html
rename to client/src/app/admin/instance/dataset/components/attribute/criteria/tr-criteria.component.html
diff --git a/client/src/app/admin/components/attribute/criteria/tr-criteria.component.ts b/client/src/app/admin/instance/dataset/components/attribute/criteria/tr-criteria.component.ts
similarity index 97%
rename from client/src/app/admin/components/attribute/criteria/tr-criteria.component.ts
rename to client/src/app/admin/instance/dataset/components/attribute/criteria/tr-criteria.component.ts
index 9c1f559f4c038fd74a28174071260afdd97c489d..464da131d1b543448ecf92cc5a53b44abe5c9215 100644
--- a/client/src/app/admin/components/attribute/criteria/tr-criteria.component.ts
+++ b/client/src/app/admin/instance/dataset/components/attribute/criteria/tr-criteria.component.ts
@@ -10,7 +10,7 @@
 import { Component, Input, Output, EventEmitter, ChangeDetectionStrategy, OnInit } from '@angular/core';
 import { FormArray, FormControl, FormGroup } from '@angular/forms';
 
-import { Attribute, Option, CriteriaFamily, SelectOption } from 'src/app/metamodel/models';
+import { Attribute, CriteriaFamily, SelectOption } from 'src/app/metamodel/models';
 
 @Component({
     selector: '[criteria]',
diff --git a/client/src/app/admin/components/attribute/design/index.ts b/client/src/app/admin/instance/dataset/components/attribute/design/index.ts
similarity index 100%
rename from client/src/app/admin/components/attribute/design/index.ts
rename to client/src/app/admin/instance/dataset/components/attribute/design/index.ts
diff --git a/client/src/app/admin/components/attribute/design/table-design.component.html b/client/src/app/admin/instance/dataset/components/attribute/design/table-design.component.html
similarity index 100%
rename from client/src/app/admin/components/attribute/design/table-design.component.html
rename to client/src/app/admin/instance/dataset/components/attribute/design/table-design.component.html
diff --git a/client/src/app/admin/components/attribute/design/table-design.component.ts b/client/src/app/admin/instance/dataset/components/attribute/design/table-design.component.ts
similarity index 100%
rename from client/src/app/admin/components/attribute/design/table-design.component.ts
rename to client/src/app/admin/instance/dataset/components/attribute/design/table-design.component.ts
diff --git a/client/src/app/admin/components/attribute/design/tr-design.component.html b/client/src/app/admin/instance/dataset/components/attribute/design/tr-design.component.html
similarity index 100%
rename from client/src/app/admin/components/attribute/design/tr-design.component.html
rename to client/src/app/admin/instance/dataset/components/attribute/design/tr-design.component.html
diff --git a/client/src/app/admin/components/attribute/design/tr-design.component.ts b/client/src/app/admin/instance/dataset/components/attribute/design/tr-design.component.ts
similarity index 100%
rename from client/src/app/admin/components/attribute/design/tr-design.component.ts
rename to client/src/app/admin/instance/dataset/components/attribute/design/tr-design.component.ts
diff --git a/client/src/app/admin/components/attribute/detail/index.ts b/client/src/app/admin/instance/dataset/components/attribute/detail/index.ts
similarity index 100%
rename from client/src/app/admin/components/attribute/detail/index.ts
rename to client/src/app/admin/instance/dataset/components/attribute/detail/index.ts
diff --git a/client/src/app/admin/components/attribute/detail/table-detail.component.html b/client/src/app/admin/instance/dataset/components/attribute/detail/table-detail.component.html
similarity index 100%
rename from client/src/app/admin/components/attribute/detail/table-detail.component.html
rename to client/src/app/admin/instance/dataset/components/attribute/detail/table-detail.component.html
diff --git a/client/src/app/admin/components/attribute/detail/table-detail.component.ts b/client/src/app/admin/instance/dataset/components/attribute/detail/table-detail.component.ts
similarity index 100%
rename from client/src/app/admin/components/attribute/detail/table-detail.component.ts
rename to client/src/app/admin/instance/dataset/components/attribute/detail/table-detail.component.ts
diff --git a/client/src/app/admin/components/attribute/detail/tr-detail.component.html b/client/src/app/admin/instance/dataset/components/attribute/detail/tr-detail.component.html
similarity index 100%
rename from client/src/app/admin/components/attribute/detail/tr-detail.component.html
rename to client/src/app/admin/instance/dataset/components/attribute/detail/tr-detail.component.html
diff --git a/client/src/app/admin/components/attribute/detail/tr-detail.component.ts b/client/src/app/admin/instance/dataset/components/attribute/detail/tr-detail.component.ts
similarity index 100%
rename from client/src/app/admin/components/attribute/detail/tr-detail.component.ts
rename to client/src/app/admin/instance/dataset/components/attribute/detail/tr-detail.component.ts
diff --git a/client/src/app/admin/components/attribute/index.ts b/client/src/app/admin/instance/dataset/components/attribute/index.ts
similarity index 100%
rename from client/src/app/admin/components/attribute/index.ts
rename to client/src/app/admin/instance/dataset/components/attribute/index.ts
diff --git a/client/src/app/admin/components/attribute/output/index.ts b/client/src/app/admin/instance/dataset/components/attribute/output/index.ts
similarity index 100%
rename from client/src/app/admin/components/attribute/output/index.ts
rename to client/src/app/admin/instance/dataset/components/attribute/output/index.ts
diff --git a/client/src/app/admin/components/attribute/output/table-output.component.html b/client/src/app/admin/instance/dataset/components/attribute/output/table-output.component.html
similarity index 100%
rename from client/src/app/admin/components/attribute/output/table-output.component.html
rename to client/src/app/admin/instance/dataset/components/attribute/output/table-output.component.html
diff --git a/client/src/app/admin/components/attribute/output/table-output.component.ts b/client/src/app/admin/instance/dataset/components/attribute/output/table-output.component.ts
similarity index 100%
rename from client/src/app/admin/components/attribute/output/table-output.component.ts
rename to client/src/app/admin/instance/dataset/components/attribute/output/table-output.component.ts
diff --git a/client/src/app/admin/components/attribute/output/tr-output.component.html b/client/src/app/admin/instance/dataset/components/attribute/output/tr-output.component.html
similarity index 100%
rename from client/src/app/admin/components/attribute/output/tr-output.component.html
rename to client/src/app/admin/instance/dataset/components/attribute/output/tr-output.component.html
diff --git a/client/src/app/admin/components/attribute/output/tr-output.component.ts b/client/src/app/admin/instance/dataset/components/attribute/output/tr-output.component.ts
similarity index 100%
rename from client/src/app/admin/components/attribute/output/tr-output.component.ts
rename to client/src/app/admin/instance/dataset/components/attribute/output/tr-output.component.ts
diff --git a/client/src/app/admin/components/attribute/result/index.ts b/client/src/app/admin/instance/dataset/components/attribute/result/index.ts
similarity index 100%
rename from client/src/app/admin/components/attribute/result/index.ts
rename to client/src/app/admin/instance/dataset/components/attribute/result/index.ts
diff --git a/client/src/app/admin/components/attribute/result/renderers/detail-renderer.component.html b/client/src/app/admin/instance/dataset/components/attribute/result/renderers/detail-renderer.component.html
similarity index 100%
rename from client/src/app/admin/components/attribute/result/renderers/detail-renderer.component.html
rename to client/src/app/admin/instance/dataset/components/attribute/result/renderers/detail-renderer.component.html
diff --git a/client/src/app/admin/components/attribute/result/renderers/detail-renderer.component.ts b/client/src/app/admin/instance/dataset/components/attribute/result/renderers/detail-renderer.component.ts
similarity index 100%
rename from client/src/app/admin/components/attribute/result/renderers/detail-renderer.component.ts
rename to client/src/app/admin/instance/dataset/components/attribute/result/renderers/detail-renderer.component.ts
diff --git a/client/src/app/admin/components/attribute/result/renderers/download-renderer.component.html b/client/src/app/admin/instance/dataset/components/attribute/result/renderers/download-renderer.component.html
similarity index 100%
rename from client/src/app/admin/components/attribute/result/renderers/download-renderer.component.html
rename to client/src/app/admin/instance/dataset/components/attribute/result/renderers/download-renderer.component.html
diff --git a/client/src/app/admin/components/attribute/result/renderers/download-renderer.component.ts b/client/src/app/admin/instance/dataset/components/attribute/result/renderers/download-renderer.component.ts
similarity index 100%
rename from client/src/app/admin/components/attribute/result/renderers/download-renderer.component.ts
rename to client/src/app/admin/instance/dataset/components/attribute/result/renderers/download-renderer.component.ts
diff --git a/client/src/app/admin/components/attribute/result/renderers/image-renderer.component.html b/client/src/app/admin/instance/dataset/components/attribute/result/renderers/image-renderer.component.html
similarity index 100%
rename from client/src/app/admin/components/attribute/result/renderers/image-renderer.component.html
rename to client/src/app/admin/instance/dataset/components/attribute/result/renderers/image-renderer.component.html
diff --git a/client/src/app/admin/components/attribute/result/renderers/image-renderer.component.ts b/client/src/app/admin/instance/dataset/components/attribute/result/renderers/image-renderer.component.ts
similarity index 100%
rename from client/src/app/admin/components/attribute/result/renderers/image-renderer.component.ts
rename to client/src/app/admin/instance/dataset/components/attribute/result/renderers/image-renderer.component.ts
diff --git a/client/src/app/admin/components/attribute/result/renderers/index.ts b/client/src/app/admin/instance/dataset/components/attribute/result/renderers/index.ts
similarity index 100%
rename from client/src/app/admin/components/attribute/result/renderers/index.ts
rename to client/src/app/admin/instance/dataset/components/attribute/result/renderers/index.ts
diff --git a/client/src/app/admin/components/attribute/result/renderers/link-renderer.component.html b/client/src/app/admin/instance/dataset/components/attribute/result/renderers/link-renderer.component.html
similarity index 100%
rename from client/src/app/admin/components/attribute/result/renderers/link-renderer.component.html
rename to client/src/app/admin/instance/dataset/components/attribute/result/renderers/link-renderer.component.html
diff --git a/client/src/app/admin/components/attribute/result/renderers/link-renderer.component.ts b/client/src/app/admin/instance/dataset/components/attribute/result/renderers/link-renderer.component.ts
similarity index 100%
rename from client/src/app/admin/components/attribute/result/renderers/link-renderer.component.ts
rename to client/src/app/admin/instance/dataset/components/attribute/result/renderers/link-renderer.component.ts
diff --git a/client/src/app/admin/components/attribute/result/renderers/renderer-form-factory.ts b/client/src/app/admin/instance/dataset/components/attribute/result/renderers/renderer-form-factory.ts
similarity index 100%
rename from client/src/app/admin/components/attribute/result/renderers/renderer-form-factory.ts
rename to client/src/app/admin/instance/dataset/components/attribute/result/renderers/renderer-form-factory.ts
diff --git a/client/src/app/admin/components/attribute/result/table-result.component.html b/client/src/app/admin/instance/dataset/components/attribute/result/table-result.component.html
similarity index 100%
rename from client/src/app/admin/components/attribute/result/table-result.component.html
rename to client/src/app/admin/instance/dataset/components/attribute/result/table-result.component.html
diff --git a/client/src/app/admin/components/attribute/result/table-result.component.ts b/client/src/app/admin/instance/dataset/components/attribute/result/table-result.component.ts
similarity index 100%
rename from client/src/app/admin/components/attribute/result/table-result.component.ts
rename to client/src/app/admin/instance/dataset/components/attribute/result/table-result.component.ts
diff --git a/client/src/app/admin/components/attribute/result/tr-result.component.html b/client/src/app/admin/instance/dataset/components/attribute/result/tr-result.component.html
similarity index 100%
rename from client/src/app/admin/components/attribute/result/tr-result.component.html
rename to client/src/app/admin/instance/dataset/components/attribute/result/tr-result.component.html
diff --git a/client/src/app/admin/components/attribute/result/tr-result.component.ts b/client/src/app/admin/instance/dataset/components/attribute/result/tr-result.component.ts
similarity index 100%
rename from client/src/app/admin/components/attribute/result/tr-result.component.ts
rename to client/src/app/admin/instance/dataset/components/attribute/result/tr-result.component.ts
diff --git a/client/src/app/admin/components/attribute/tr.component.scss b/client/src/app/admin/instance/dataset/components/attribute/tr.component.scss
similarity index 100%
rename from client/src/app/admin/components/attribute/tr.component.scss
rename to client/src/app/admin/instance/dataset/components/attribute/tr.component.scss
diff --git a/client/src/app/admin/components/attribute/vo/index.ts b/client/src/app/admin/instance/dataset/components/attribute/vo/index.ts
similarity index 100%
rename from client/src/app/admin/components/attribute/vo/index.ts
rename to client/src/app/admin/instance/dataset/components/attribute/vo/index.ts
diff --git a/client/src/app/admin/components/attribute/vo/table-vo.component.html b/client/src/app/admin/instance/dataset/components/attribute/vo/table-vo.component.html
similarity index 100%
rename from client/src/app/admin/components/attribute/vo/table-vo.component.html
rename to client/src/app/admin/instance/dataset/components/attribute/vo/table-vo.component.html
diff --git a/client/src/app/admin/components/attribute/vo/table-vo.component.ts b/client/src/app/admin/instance/dataset/components/attribute/vo/table-vo.component.ts
similarity index 100%
rename from client/src/app/admin/components/attribute/vo/table-vo.component.ts
rename to client/src/app/admin/instance/dataset/components/attribute/vo/table-vo.component.ts
diff --git a/client/src/app/admin/components/attribute/vo/tr-vo.component.html b/client/src/app/admin/instance/dataset/components/attribute/vo/tr-vo.component.html
similarity index 100%
rename from client/src/app/admin/components/attribute/vo/tr-vo.component.html
rename to client/src/app/admin/instance/dataset/components/attribute/vo/tr-vo.component.html
diff --git a/client/src/app/admin/components/attribute/vo/tr-vo.component.ts b/client/src/app/admin/instance/dataset/components/attribute/vo/tr-vo.component.ts
similarity index 100%
rename from client/src/app/admin/components/attribute/vo/tr-vo.component.ts
rename to client/src/app/admin/instance/dataset/components/attribute/vo/tr-vo.component.ts
diff --git a/client/src/app/admin/components/criteria-family/add-criteria-family.component.html b/client/src/app/admin/instance/dataset/components/criteria-family/add-criteria-family.component.html
similarity index 100%
rename from client/src/app/admin/components/criteria-family/add-criteria-family.component.html
rename to client/src/app/admin/instance/dataset/components/criteria-family/add-criteria-family.component.html
diff --git a/client/src/app/admin/components/criteria-family/add-criteria-family.component.ts b/client/src/app/admin/instance/dataset/components/criteria-family/add-criteria-family.component.ts
similarity index 100%
rename from client/src/app/admin/components/criteria-family/add-criteria-family.component.ts
rename to client/src/app/admin/instance/dataset/components/criteria-family/add-criteria-family.component.ts
diff --git a/client/src/app/admin/components/criteria-family/criteria-family-form.component.html b/client/src/app/admin/instance/dataset/components/criteria-family/criteria-family-form.component.html
similarity index 100%
rename from client/src/app/admin/components/criteria-family/criteria-family-form.component.html
rename to client/src/app/admin/instance/dataset/components/criteria-family/criteria-family-form.component.html
diff --git a/client/src/app/admin/components/criteria-family/criteria-family-form.component.ts b/client/src/app/admin/instance/dataset/components/criteria-family/criteria-family-form.component.ts
similarity index 100%
rename from client/src/app/admin/components/criteria-family/criteria-family-form.component.ts
rename to client/src/app/admin/instance/dataset/components/criteria-family/criteria-family-form.component.ts
diff --git a/client/src/app/admin/components/criteria-family/criteria-family-list.component.html b/client/src/app/admin/instance/dataset/components/criteria-family/criteria-family-list.component.html
similarity index 100%
rename from client/src/app/admin/components/criteria-family/criteria-family-list.component.html
rename to client/src/app/admin/instance/dataset/components/criteria-family/criteria-family-list.component.html
diff --git a/client/src/app/admin/components/criteria-family/criteria-family-list.component.scss b/client/src/app/admin/instance/dataset/components/criteria-family/criteria-family-list.component.scss
similarity index 100%
rename from client/src/app/admin/components/criteria-family/criteria-family-list.component.scss
rename to client/src/app/admin/instance/dataset/components/criteria-family/criteria-family-list.component.scss
diff --git a/client/src/app/admin/components/criteria-family/criteria-family-list.component.ts b/client/src/app/admin/instance/dataset/components/criteria-family/criteria-family-list.component.ts
similarity index 100%
rename from client/src/app/admin/components/criteria-family/criteria-family-list.component.ts
rename to client/src/app/admin/instance/dataset/components/criteria-family/criteria-family-list.component.ts
diff --git a/client/src/app/admin/components/criteria-family/edit-criteria-family.component.html b/client/src/app/admin/instance/dataset/components/criteria-family/edit-criteria-family.component.html
similarity index 100%
rename from client/src/app/admin/components/criteria-family/edit-criteria-family.component.html
rename to client/src/app/admin/instance/dataset/components/criteria-family/edit-criteria-family.component.html
diff --git a/client/src/app/admin/components/criteria-family/edit-criteria-family.component.ts b/client/src/app/admin/instance/dataset/components/criteria-family/edit-criteria-family.component.ts
similarity index 100%
rename from client/src/app/admin/components/criteria-family/edit-criteria-family.component.ts
rename to client/src/app/admin/instance/dataset/components/criteria-family/edit-criteria-family.component.ts
diff --git a/client/src/app/admin/components/criteria-family/index.ts b/client/src/app/admin/instance/dataset/components/criteria-family/index.ts
similarity index 100%
rename from client/src/app/admin/components/criteria-family/index.ts
rename to client/src/app/admin/instance/dataset/components/criteria-family/index.ts
diff --git a/client/src/app/admin/components/dataset-family/dataset-family-card.component.html b/client/src/app/admin/instance/dataset/components/dataset-family/dataset-family-card.component.html
similarity index 84%
rename from client/src/app/admin/components/dataset-family/dataset-family-card.component.html
rename to client/src/app/admin/instance/dataset/components/dataset-family/dataset-family-card.component.html
index 9bd7e3cc3ce2dbcca712ae3148e25e9d4684f7fd..7ef0d9080fe252a8490ce10e9e98db8051cd5983 100644
--- a/client/src/app/admin/components/dataset-family/dataset-family-card.component.html
+++ b/client/src/app/admin/instance/dataset/components/dataset-family/dataset-family-card.component.html
@@ -24,12 +24,13 @@
         <div class="row row-cols-1 row-cols-sm-2 row-cols-md-3">
             <div *ngFor="let dataset of (datasetList | datasetListByFamily:datasetFamily.id)" class="col mb-3">
                 <app-dataset-card 
+                    [instance]="instance"
                     [dataset]="dataset"
                     (deleteDataset)="deleteDataset.emit($event)">
                 </app-dataset-card>
             </div>
             <div class="col h-100 d-table">
-                <div routerLink="new-dataset" [queryParams]="{id_dataset_family: datasetFamily.id}" class="card card-add d-table-cell align-middle pointer" title="Add new dataset">
+                <div routerLink="/admin/instance/configure-instance/{{ instance.name }}/dataset/new-dataset" [queryParams]="{id_dataset_family: datasetFamily.id}" class="card card-add d-table-cell align-middle pointer" title="Add new dataset">
                     <div class="card-body text-center">
                         <span class="fas fa-plus fa-4x text-light"></span>
                     </div>
diff --git a/client/src/app/admin/components/dataset-family/dataset-family-card.component.ts b/client/src/app/admin/instance/dataset/components/dataset-family/dataset-family-card.component.ts
similarity index 90%
rename from client/src/app/admin/components/dataset-family/dataset-family-card.component.ts
rename to client/src/app/admin/instance/dataset/components/dataset-family/dataset-family-card.component.ts
index f7adc04d873af2975adcd6321c4eba425fb80335..8deeedd3df533d2ca6c41785e4788e4b86074f7e 100644
--- a/client/src/app/admin/components/dataset-family/dataset-family-card.component.ts
+++ b/client/src/app/admin/instance/dataset/components/dataset-family/dataset-family-card.component.ts
@@ -9,7 +9,7 @@
 
 import { Component, Input, Output, ChangeDetectionStrategy, EventEmitter } from '@angular/core';
 
-import { DatasetFamily, Dataset } from 'src/app/metamodel/models';
+import { Instance, DatasetFamily, Dataset } from 'src/app/metamodel/models';
 
 @Component({
     selector: 'app-dataset-family-card',
@@ -17,6 +17,7 @@ import { DatasetFamily, Dataset } from 'src/app/metamodel/models';
     changeDetection: ChangeDetectionStrategy.OnPush
 })
 export class DatasetFamilyCardComponent {
+    @Input() instance: Instance;
     @Input() datasetFamily: DatasetFamily;
     @Input() datasetList: Dataset[];
     @Output() editDatasetFamily: EventEmitter<DatasetFamily> = new EventEmitter();
diff --git a/client/src/app/admin/components/dataset-family/dataset-family-form.component.html b/client/src/app/admin/instance/dataset/components/dataset-family/dataset-family-form.component.html
similarity index 100%
rename from client/src/app/admin/components/dataset-family/dataset-family-form.component.html
rename to client/src/app/admin/instance/dataset/components/dataset-family/dataset-family-form.component.html
diff --git a/client/src/app/admin/components/dataset-family/dataset-family-form.component.ts b/client/src/app/admin/instance/dataset/components/dataset-family/dataset-family-form.component.ts
similarity index 100%
rename from client/src/app/admin/components/dataset-family/dataset-family-form.component.ts
rename to client/src/app/admin/instance/dataset/components/dataset-family/dataset-family-form.component.ts
diff --git a/client/src/app/admin/components/dataset-family/edit-dataset-family.component.html b/client/src/app/admin/instance/dataset/components/dataset-family/edit-dataset-family.component.html
similarity index 100%
rename from client/src/app/admin/components/dataset-family/edit-dataset-family.component.html
rename to client/src/app/admin/instance/dataset/components/dataset-family/edit-dataset-family.component.html
diff --git a/client/src/app/admin/components/dataset-family/edit-dataset-family.component.ts b/client/src/app/admin/instance/dataset/components/dataset-family/edit-dataset-family.component.ts
similarity index 100%
rename from client/src/app/admin/components/dataset-family/edit-dataset-family.component.ts
rename to client/src/app/admin/instance/dataset/components/dataset-family/edit-dataset-family.component.ts
diff --git a/client/src/app/admin/components/dataset-family/index.ts b/client/src/app/admin/instance/dataset/components/dataset-family/index.ts
similarity index 87%
rename from client/src/app/admin/components/dataset-family/index.ts
rename to client/src/app/admin/instance/dataset/components/dataset-family/index.ts
index 386695dc5fa9184a9d3ebffad47e5a20cb6770e4..8b6d3a7f8356b774445e143dfef0acec110900a9 100644
--- a/client/src/app/admin/components/dataset-family/index.ts
+++ b/client/src/app/admin/instance/dataset/components/dataset-family/index.ts
@@ -9,7 +9,7 @@
 
 import { DatasetFamilyCardComponent } from "./dataset-family-card.component";
 import { EditDatasetFamilyComponent } from "./edit-dataset-family.component";
-import { DatasetFamilyFormComponent } from "./dataset-family-form.component";
+import { DatasetFamilyFormComponent } from './dataset-family-form.component';
 
 export const datasetFamilyComponents = [
     DatasetFamilyCardComponent,
diff --git a/client/src/app/admin/components/dataset/cone-search-form-group.component.html b/client/src/app/admin/instance/dataset/components/dataset/cone-search-form-group.component.html
similarity index 100%
rename from client/src/app/admin/components/dataset/cone-search-form-group.component.html
rename to client/src/app/admin/instance/dataset/components/dataset/cone-search-form-group.component.html
diff --git a/client/src/app/admin/components/dataset/cone-search-form-group.component.ts b/client/src/app/admin/instance/dataset/components/dataset/cone-search-form-group.component.ts
similarity index 100%
rename from client/src/app/admin/components/dataset/cone-search-form-group.component.ts
rename to client/src/app/admin/instance/dataset/components/dataset/cone-search-form-group.component.ts
diff --git a/client/src/app/admin/components/dataset/dataset-card.component.html b/client/src/app/admin/instance/dataset/components/dataset/dataset-card.component.html
similarity index 67%
rename from client/src/app/admin/components/dataset/dataset-card.component.html
rename to client/src/app/admin/instance/dataset/components/dataset/dataset-card.component.html
index 0774b7e59a5857c7775c18bc1cc005eeb9ca3564..7ea2e12a0fbf3b11861000265f4b3392f9edcb52 100644
--- a/client/src/app/admin/components/dataset/dataset-card.component.html
+++ b/client/src/app/admin/instance/dataset/components/dataset/dataset-card.component.html
@@ -13,11 +13,11 @@
         </p>
     </div>
     <div class="card-footer bg-transparent text-right">
-        <a routerLink="configure-dataset/{{dataset.name}}" [queryParams]="{tab_selected: 'design'}" class="btn btn-outline-primary" title="Configure this dataset">
+        <a routerLink="/admin/instance/configure-instance/{{ instance.name }}/dataset/configure-dataset/{{dataset.name}}" [queryParams]="{tab_selected: 'design'}" class="btn btn-outline-primary" title="Configure this dataset">
             <span class="fas fa-cog"></span>
         </a>
         &nbsp;
-        <a title="Edit this dataset" routerLink="edit-dataset/{{dataset.name}}" class="btn btn-outline-primary">
+        <a title="Edit this dataset" routerLink="/admin/instance/configure-instance/{{ instance.name }}/dataset/edit-dataset/{{dataset.name}}" class="btn btn-outline-primary">
             <span class="fas fa-edit"></span>
         </a>
         &nbsp;
diff --git a/client/src/app/admin/components/dataset/dataset-card.component.scss b/client/src/app/admin/instance/dataset/components/dataset/dataset-card.component.scss
similarity index 100%
rename from client/src/app/admin/components/dataset/dataset-card.component.scss
rename to client/src/app/admin/instance/dataset/components/dataset/dataset-card.component.scss
diff --git a/client/src/app/admin/components/dataset/dataset-card.component.ts b/client/src/app/admin/instance/dataset/components/dataset/dataset-card.component.ts
similarity index 87%
rename from client/src/app/admin/components/dataset/dataset-card.component.ts
rename to client/src/app/admin/instance/dataset/components/dataset/dataset-card.component.ts
index 8915283efaf0296a735078d6f1561ce527930d59..844ba05c7aff50040433de835cb27d3853586bef 100644
--- a/client/src/app/admin/components/dataset/dataset-card.component.ts
+++ b/client/src/app/admin/instance/dataset/components/dataset/dataset-card.component.ts
@@ -9,7 +9,7 @@
 
 import { Component, Input, Output, ChangeDetectionStrategy, EventEmitter } from '@angular/core';
 
-import { Dataset } from 'src/app/metamodel/models';
+import { Instance, Dataset } from 'src/app/metamodel/models';
 
 @Component({
     selector: 'app-dataset-card',
@@ -18,6 +18,7 @@ import { Dataset } from 'src/app/metamodel/models';
     changeDetection: ChangeDetectionStrategy.OnPush
 })
 export class DatasetCardComponent {
+    @Input() instance: Instance;
     @Input() dataset: Dataset;
     @Output() deleteDataset: EventEmitter<Dataset> = new EventEmitter();
 }
diff --git a/client/src/app/admin/components/dataset/dataset-form.component.html b/client/src/app/admin/instance/dataset/components/dataset/dataset-form.component.html
similarity index 100%
rename from client/src/app/admin/components/dataset/dataset-form.component.html
rename to client/src/app/admin/instance/dataset/components/dataset/dataset-form.component.html
diff --git a/client/src/app/admin/components/dataset/dataset-form.component.ts b/client/src/app/admin/instance/dataset/components/dataset/dataset-form.component.ts
similarity index 98%
rename from client/src/app/admin/components/dataset/dataset-form.component.ts
rename to client/src/app/admin/instance/dataset/components/dataset/dataset-form.component.ts
index db9f0b6f2a2c5335dddb6786d640081e0372482f..de141e1f8e93845a2cfe37e1f8540632c2bf4722 100644
--- a/client/src/app/admin/components/dataset/dataset-form.component.ts
+++ b/client/src/app/admin/instance/dataset/components/dataset/dataset-form.component.ts
@@ -146,6 +146,6 @@ export class DatasetFormComponent implements OnInit, OnChanges {
     }
 
     onChangeDataPath(path: string) {
-        this.loadRootDirectory.emit(this.instance.data_path + path);
+        this.loadRootDirectory.emit(`${this.instance.data_path}${path}`);
     }
 }
diff --git a/client/src/app/admin/components/dataset/datatable-form-group.component.html b/client/src/app/admin/instance/dataset/components/dataset/datatable-form-group.component.html
similarity index 100%
rename from client/src/app/admin/components/dataset/datatable-form-group.component.html
rename to client/src/app/admin/instance/dataset/components/dataset/datatable-form-group.component.html
diff --git a/client/src/app/admin/components/dataset/datatable-form-group.component.ts b/client/src/app/admin/instance/dataset/components/dataset/datatable-form-group.component.ts
similarity index 100%
rename from client/src/app/admin/components/dataset/datatable-form-group.component.ts
rename to client/src/app/admin/instance/dataset/components/dataset/datatable-form-group.component.ts
diff --git a/client/src/app/admin/components/dataset/download-form-group.component.html b/client/src/app/admin/instance/dataset/components/dataset/download-form-group.component.html
similarity index 100%
rename from client/src/app/admin/components/dataset/download-form-group.component.html
rename to client/src/app/admin/instance/dataset/components/dataset/download-form-group.component.html
diff --git a/client/src/app/admin/components/dataset/download-form-group.component.ts b/client/src/app/admin/instance/dataset/components/dataset/download-form-group.component.ts
similarity index 100%
rename from client/src/app/admin/components/dataset/download-form-group.component.ts
rename to client/src/app/admin/instance/dataset/components/dataset/download-form-group.component.ts
diff --git a/client/src/app/admin/components/dataset/image-form-group.component.html b/client/src/app/admin/instance/dataset/components/dataset/image-form-group.component.html
similarity index 100%
rename from client/src/app/admin/components/dataset/image-form-group.component.html
rename to client/src/app/admin/instance/dataset/components/dataset/image-form-group.component.html
diff --git a/client/src/app/admin/components/dataset/image-form-group.component.ts b/client/src/app/admin/instance/dataset/components/dataset/image-form-group.component.ts
similarity index 100%
rename from client/src/app/admin/components/dataset/image-form-group.component.ts
rename to client/src/app/admin/instance/dataset/components/dataset/image-form-group.component.ts
diff --git a/client/src/app/admin/components/dataset/index.ts b/client/src/app/admin/instance/dataset/components/dataset/index.ts
similarity index 100%
rename from client/src/app/admin/components/dataset/index.ts
rename to client/src/app/admin/instance/dataset/components/dataset/index.ts
diff --git a/client/src/app/admin/components/dataset/info-survey-form-group.component.html b/client/src/app/admin/instance/dataset/components/dataset/info-survey-form-group.component.html
similarity index 100%
rename from client/src/app/admin/components/dataset/info-survey-form-group.component.html
rename to client/src/app/admin/instance/dataset/components/dataset/info-survey-form-group.component.html
diff --git a/client/src/app/admin/components/dataset/info-survey-form-group.component.ts b/client/src/app/admin/instance/dataset/components/dataset/info-survey-form-group.component.ts
similarity index 100%
rename from client/src/app/admin/components/dataset/info-survey-form-group.component.ts
rename to client/src/app/admin/instance/dataset/components/dataset/info-survey-form-group.component.ts
diff --git a/client/src/app/admin/components/dataset/samp-form-group.component.html b/client/src/app/admin/instance/dataset/components/dataset/samp-form-group.component.html
similarity index 100%
rename from client/src/app/admin/components/dataset/samp-form-group.component.html
rename to client/src/app/admin/instance/dataset/components/dataset/samp-form-group.component.html
diff --git a/client/src/app/admin/components/dataset/samp-form-group.component.ts b/client/src/app/admin/instance/dataset/components/dataset/samp-form-group.component.ts
similarity index 100%
rename from client/src/app/admin/components/dataset/samp-form-group.component.ts
rename to client/src/app/admin/instance/dataset/components/dataset/samp-form-group.component.ts
diff --git a/client/src/app/admin/components/dataset/server-link-form-group.component.html b/client/src/app/admin/instance/dataset/components/dataset/server-link-form-group.component.html
similarity index 100%
rename from client/src/app/admin/components/dataset/server-link-form-group.component.html
rename to client/src/app/admin/instance/dataset/components/dataset/server-link-form-group.component.html
diff --git a/client/src/app/admin/components/dataset/server-link-form-group.component.ts b/client/src/app/admin/instance/dataset/components/dataset/server-link-form-group.component.ts
similarity index 100%
rename from client/src/app/admin/components/dataset/server-link-form-group.component.ts
rename to client/src/app/admin/instance/dataset/components/dataset/server-link-form-group.component.ts
diff --git a/client/src/app/admin/components/dataset/summary-form-group.component.html b/client/src/app/admin/instance/dataset/components/dataset/summary-form-group.component.html
similarity index 100%
rename from client/src/app/admin/components/dataset/summary-form-group.component.html
rename to client/src/app/admin/instance/dataset/components/dataset/summary-form-group.component.html
diff --git a/client/src/app/admin/components/dataset/summary-form-group.component.ts b/client/src/app/admin/instance/dataset/components/dataset/summary-form-group.component.ts
similarity index 100%
rename from client/src/app/admin/components/dataset/summary-form-group.component.ts
rename to client/src/app/admin/instance/dataset/components/dataset/summary-form-group.component.ts
diff --git a/client/src/app/admin/components/index.ts b/client/src/app/admin/instance/dataset/components/index.ts
similarity index 65%
rename from client/src/app/admin/components/index.ts
rename to client/src/app/admin/instance/dataset/components/index.ts
index 11579f8b940618914752185cb935a3c9f0b0c8f8..dcda3d628ea4aae970db1fdfd3e52220d58c5766 100644
--- a/client/src/app/admin/components/index.ts
+++ b/client/src/app/admin/instance/dataset/components/index.ts
@@ -9,28 +9,18 @@
 
 import { attributeComponents } from './attribute';
 import { criteriaFamilyComponents } from './criteria-family';
-import { databaseComponents } from './database';
 import { datasetComponents } from './dataset';
 import { datasetFamilyComponents } from './dataset-family';
-import { groupComponents } from './group';
-import { instanceComponents } from './instance';
 import { outputCategoryComponents } from './output-category';
 import { outputFamilyComponents } from './output-family';
-import { settingsComponents } from './settings';
-import { sharedComponents } from './shared';
-import { surveyComponents } from './survey';
+import { InstanceButtonsComponent } from './instance-buttons.component';
 
 export const dummiesComponents = [
     attributeComponents,
     criteriaFamilyComponents,
-    databaseComponents,
     datasetComponents,
     datasetFamilyComponents,
-    groupComponents,
-    instanceComponents,
     outputCategoryComponents,
     outputFamilyComponents,
-    settingsComponents,
-    sharedComponents,
-    surveyComponents
+    InstanceButtonsComponent
 ];
diff --git a/client/src/app/admin/components/instance/instance-buttons.component.html b/client/src/app/admin/instance/dataset/components/instance-buttons.component.html
similarity index 89%
rename from client/src/app/admin/components/instance/instance-buttons.component.html
rename to client/src/app/admin/instance/dataset/components/instance-buttons.component.html
index 77ea80cdecad4bfcbab27b0da2870e8649a26a11..3b891d4dc243cc8fda0133169b3f59ea7b16d48d 100644
--- a/client/src/app/admin/components/instance/instance-buttons.component.html
+++ b/client/src/app/admin/instance/dataset/components/instance-buttons.component.html
@@ -5,7 +5,7 @@
         </button>
     </div>
     <div class="btn-group mr-2" role="group" aria-label="Second group">
-        <button routerLink="group" title="Handle groups" class="btn btn-outline-primary">
+        <button routerLink="/admin/instance/configure-instance/{{ instance.name }}/group" title="Handle groups" class="btn btn-outline-primary">
             <span class="fas fa-users"></span> Handle groups
         </button>
     </div>
diff --git a/client/src/app/admin/components/instance/instance-buttons.component.ts b/client/src/app/admin/instance/dataset/components/instance-buttons.component.ts
similarity index 86%
rename from client/src/app/admin/components/instance/instance-buttons.component.ts
rename to client/src/app/admin/instance/dataset/components/instance-buttons.component.ts
index 2107d8756f8720fae21a281b6985cffc7a9bf844..5e423a97c7bc91b95d73101854c3f409502404b4 100644
--- a/client/src/app/admin/components/instance/instance-buttons.component.ts
+++ b/client/src/app/admin/instance/dataset/components/instance-buttons.component.ts
@@ -7,12 +7,12 @@
  * file that was distributed with this source code.
  */
 
-import { Component, Output, ChangeDetectionStrategy, EventEmitter, TemplateRef } from '@angular/core';
+import { Component, Output, ChangeDetectionStrategy, EventEmitter, TemplateRef, Input } from '@angular/core';
 
 import { BsModalService } from 'ngx-bootstrap/modal';
 import { BsModalRef } from 'ngx-bootstrap/modal/bs-modal-ref.service';
 
-import { DatasetFamily } from 'src/app/metamodel/models';
+import { Instance, DatasetFamily } from 'src/app/metamodel/models';
 
 @Component({
     selector: 'app-instance-buttons',
@@ -20,6 +20,7 @@ import { DatasetFamily } from 'src/app/metamodel/models';
     changeDetection: ChangeDetectionStrategy.OnPush
 })
 export class InstanceButtonsComponent {
+    @Input() instance: Instance;
     @Output() addDatasetFamily: EventEmitter<DatasetFamily> = new EventEmitter();
 
     modalRef: BsModalRef;
diff --git a/client/src/app/admin/components/output-category/add-output-category.component.html b/client/src/app/admin/instance/dataset/components/output-category/add-output-category.component.html
similarity index 100%
rename from client/src/app/admin/components/output-category/add-output-category.component.html
rename to client/src/app/admin/instance/dataset/components/output-category/add-output-category.component.html
diff --git a/client/src/app/admin/components/output-category/add-output-category.component.ts b/client/src/app/admin/instance/dataset/components/output-category/add-output-category.component.ts
similarity index 100%
rename from client/src/app/admin/components/output-category/add-output-category.component.ts
rename to client/src/app/admin/instance/dataset/components/output-category/add-output-category.component.ts
diff --git a/client/src/app/admin/components/output-category/edit-output-category.component.html b/client/src/app/admin/instance/dataset/components/output-category/edit-output-category.component.html
similarity index 100%
rename from client/src/app/admin/components/output-category/edit-output-category.component.html
rename to client/src/app/admin/instance/dataset/components/output-category/edit-output-category.component.html
diff --git a/client/src/app/admin/components/output-category/edit-output-category.component.ts b/client/src/app/admin/instance/dataset/components/output-category/edit-output-category.component.ts
similarity index 100%
rename from client/src/app/admin/components/output-category/edit-output-category.component.ts
rename to client/src/app/admin/instance/dataset/components/output-category/edit-output-category.component.ts
diff --git a/client/src/app/admin/components/output-category/index.ts b/client/src/app/admin/instance/dataset/components/output-category/index.ts
similarity index 100%
rename from client/src/app/admin/components/output-category/index.ts
rename to client/src/app/admin/instance/dataset/components/output-category/index.ts
diff --git a/client/src/app/admin/components/output-category/output-category-form.component.html b/client/src/app/admin/instance/dataset/components/output-category/output-category-form.component.html
similarity index 100%
rename from client/src/app/admin/components/output-category/output-category-form.component.html
rename to client/src/app/admin/instance/dataset/components/output-category/output-category-form.component.html
diff --git a/client/src/app/admin/components/output-category/output-category-form.component.ts b/client/src/app/admin/instance/dataset/components/output-category/output-category-form.component.ts
similarity index 100%
rename from client/src/app/admin/components/output-category/output-category-form.component.ts
rename to client/src/app/admin/instance/dataset/components/output-category/output-category-form.component.ts
diff --git a/client/src/app/admin/components/output-category/output-category-list.component.html b/client/src/app/admin/instance/dataset/components/output-category/output-category-list.component.html
similarity index 100%
rename from client/src/app/admin/components/output-category/output-category-list.component.html
rename to client/src/app/admin/instance/dataset/components/output-category/output-category-list.component.html
diff --git a/client/src/app/admin/components/output-category/output-category-list.component.ts b/client/src/app/admin/instance/dataset/components/output-category/output-category-list.component.ts
similarity index 100%
rename from client/src/app/admin/components/output-category/output-category-list.component.ts
rename to client/src/app/admin/instance/dataset/components/output-category/output-category-list.component.ts
diff --git a/client/src/app/admin/components/output-family/add-output-family.component.html b/client/src/app/admin/instance/dataset/components/output-family/add-output-family.component.html
similarity index 100%
rename from client/src/app/admin/components/output-family/add-output-family.component.html
rename to client/src/app/admin/instance/dataset/components/output-family/add-output-family.component.html
diff --git a/client/src/app/admin/components/output-family/add-output-family.component.ts b/client/src/app/admin/instance/dataset/components/output-family/add-output-family.component.ts
similarity index 100%
rename from client/src/app/admin/components/output-family/add-output-family.component.ts
rename to client/src/app/admin/instance/dataset/components/output-family/add-output-family.component.ts
diff --git a/client/src/app/admin/components/output-family/edit-output-family.component.html b/client/src/app/admin/instance/dataset/components/output-family/edit-output-family.component.html
similarity index 100%
rename from client/src/app/admin/components/output-family/edit-output-family.component.html
rename to client/src/app/admin/instance/dataset/components/output-family/edit-output-family.component.html
diff --git a/client/src/app/admin/components/output-family/edit-output-family.component.ts b/client/src/app/admin/instance/dataset/components/output-family/edit-output-family.component.ts
similarity index 100%
rename from client/src/app/admin/components/output-family/edit-output-family.component.ts
rename to client/src/app/admin/instance/dataset/components/output-family/edit-output-family.component.ts
diff --git a/client/src/app/admin/components/output-family/index.ts b/client/src/app/admin/instance/dataset/components/output-family/index.ts
similarity index 100%
rename from client/src/app/admin/components/output-family/index.ts
rename to client/src/app/admin/instance/dataset/components/output-family/index.ts
diff --git a/client/src/app/admin/components/output-family/output-family-form.component.html b/client/src/app/admin/instance/dataset/components/output-family/output-family-form.component.html
similarity index 100%
rename from client/src/app/admin/components/output-family/output-family-form.component.html
rename to client/src/app/admin/instance/dataset/components/output-family/output-family-form.component.html
diff --git a/client/src/app/admin/components/output-family/output-family-form.component.ts b/client/src/app/admin/instance/dataset/components/output-family/output-family-form.component.ts
similarity index 100%
rename from client/src/app/admin/components/output-family/output-family-form.component.ts
rename to client/src/app/admin/instance/dataset/components/output-family/output-family-form.component.ts
diff --git a/client/src/app/admin/components/output-family/output-family-list.component.html b/client/src/app/admin/instance/dataset/components/output-family/output-family-list.component.html
similarity index 100%
rename from client/src/app/admin/components/output-family/output-family-list.component.html
rename to client/src/app/admin/instance/dataset/components/output-family/output-family-list.component.html
diff --git a/client/src/app/admin/components/output-family/output-family-list.component.ts b/client/src/app/admin/instance/dataset/components/output-family/output-family-list.component.ts
similarity index 100%
rename from client/src/app/admin/components/output-family/output-family-list.component.ts
rename to client/src/app/admin/instance/dataset/components/output-family/output-family-list.component.ts
diff --git a/client/src/app/admin/containers/attribute/attribute-list.component.html b/client/src/app/admin/instance/dataset/containers/attribute-list.component.html
similarity index 98%
rename from client/src/app/admin/containers/attribute/attribute-list.component.html
rename to client/src/app/admin/instance/dataset/containers/attribute-list.component.html
index 260e9769194a7d32baadf2ea0ee25385f053f12f..1a5bee747c36d407b61e39d3f8edf55bf5b47207 100644
--- a/client/src/app/admin/containers/attribute/attribute-list.component.html
+++ b/client/src/app/admin/instance/dataset/containers/attribute-list.component.html
@@ -2,10 +2,10 @@
     <nav aria-label="breadcrumb">
         <ol class="breadcrumb">
             <li class="breadcrumb-item">
-                <a routerLink="/admin/instance-list">Instances</a>
+                <a routerLink="/admin/instance/instance-list">Instances</a>
             </li>
             <li class="breadcrumb-item">
-                <a routerLink="/admin/configure-instance/{{ instanceSelected | async }}">
+                <a routerLink="/admin/instance/configure-instance/{{ instanceSelected | async }}">
                     Configure instance {{ instanceSelected | async }}
                 </a>
             </li>
diff --git a/client/src/app/admin/containers/attribute/attribute-list.component.scss b/client/src/app/admin/instance/dataset/containers/attribute-list.component.scss
similarity index 100%
rename from client/src/app/admin/containers/attribute/attribute-list.component.scss
rename to client/src/app/admin/instance/dataset/containers/attribute-list.component.scss
diff --git a/client/src/app/admin/containers/attribute/attribute-list.component.ts b/client/src/app/admin/instance/dataset/containers/attribute-list.component.ts
similarity index 100%
rename from client/src/app/admin/containers/attribute/attribute-list.component.ts
rename to client/src/app/admin/instance/dataset/containers/attribute-list.component.ts
diff --git a/client/src/app/admin/containers/dataset/dataset-list.component.html b/client/src/app/admin/instance/dataset/containers/dataset-list.component.html
similarity index 89%
rename from client/src/app/admin/containers/dataset/dataset-list.component.html
rename to client/src/app/admin/instance/dataset/containers/dataset-list.component.html
index 93caa925b0c19e4b32b20429cd46d517d1ad7798..8bf229d3ae1673e2b060abab2935ae8103a17e20 100644
--- a/client/src/app/admin/containers/dataset/dataset-list.component.html
+++ b/client/src/app/admin/instance/dataset/containers/dataset-list.component.html
@@ -1,7 +1,7 @@
 <div class="container-fluid">
     <nav aria-label="breadcrumb">
         <ol class="breadcrumb">
-            <li class="breadcrumb-item"><a routerLink="/admin/instance-list">Instances</a></li>
+            <li class="breadcrumb-item"><a routerLink="/admin/instance/instance-list">Instances</a></li>
             <li class="breadcrumb-item active" aria-current="page">Configure instance {{ (instance | async).label }}</li>
         </ol>
     </nav>
@@ -12,11 +12,13 @@
 
     <ng-container *ngIf="(datasetFamilyListIsLoaded | async) && (datasetListIsLoaded | async)">
         <app-instance-buttons
+            [instance]="instance | async"
             (addDatasetFamily)="addDatasetFamily($event)">
         </app-instance-buttons>
 
         <app-dataset-family-card 
             *ngFor="let datasetFamily of (datasetFamilyList | async)"
+            [instance]="instance | async"
             [datasetFamily]="datasetFamily"
             [datasetList]="datasetList | async"
             (editDatasetFamily)="editDatasetFamily($event)"
diff --git a/client/src/app/admin/containers/dataset/dataset-list.component.ts b/client/src/app/admin/instance/dataset/containers/dataset-list.component.ts
similarity index 100%
rename from client/src/app/admin/containers/dataset/dataset-list.component.ts
rename to client/src/app/admin/instance/dataset/containers/dataset-list.component.ts
diff --git a/client/src/app/admin/containers/dataset/edit-dataset.component.html b/client/src/app/admin/instance/dataset/containers/edit-dataset.component.html
similarity index 87%
rename from client/src/app/admin/containers/dataset/edit-dataset.component.html
rename to client/src/app/admin/instance/dataset/containers/edit-dataset.component.html
index e62c65f9be444d402452fde136079d841bd6a75d..ab9dd10e4004adae8d0bbc36009ff20688e0aded 100644
--- a/client/src/app/admin/containers/dataset/edit-dataset.component.html
+++ b/client/src/app/admin/instance/dataset/containers/edit-dataset.component.html
@@ -2,10 +2,10 @@
     <nav aria-label="breadcrumb">
         <ol class="breadcrumb">
             <li class="breadcrumb-item">
-                <a routerLink="/admin/instance-list">Instances</a>
+                <a routerLink="/admin/instance/instance-list">Instances</a>
             </li>
             <li class="breadcrumb-item active" aria-current="page">
-                <a routerLink="/admin/configure-instance/{{ (instance | async).name }}">
+                <a routerLink="/admin/instance/configure-instance/{{ (instance | async).name }}">
                     Configure instance {{ (instance | async).name }}
                 </a>
             </li>
@@ -45,7 +45,7 @@
                     <span class="fa fa-database"></span> Update dataset information
                 </button>
                 &nbsp;
-                <a routerLink="/admin/configure-instance/{{ (instance | async).name }}" type="button" class="btn btn-danger">Cancel</a>
+                <a routerLink="/admin/instance/configure-instance/{{ (instance | async).name }}" type="button" class="btn btn-danger">Cancel</a>
             </app-dataset-form>
         </div>
     </div>
diff --git a/client/src/app/admin/containers/dataset/edit-dataset.component.ts b/client/src/app/admin/instance/dataset/containers/edit-dataset.component.ts
similarity index 100%
rename from client/src/app/admin/containers/dataset/edit-dataset.component.ts
rename to client/src/app/admin/instance/dataset/containers/edit-dataset.component.ts
diff --git a/client/src/app/admin/containers/dataset/new-dataset.component.html b/client/src/app/admin/instance/dataset/containers/new-dataset.component.html
similarity index 85%
rename from client/src/app/admin/containers/dataset/new-dataset.component.html
rename to client/src/app/admin/instance/dataset/containers/new-dataset.component.html
index 1cdb2d3fe6dd6091276d3194c0db9a73db0ac935..ec5db0afee08c5a7988e3939c107336436a31a55 100644
--- a/client/src/app/admin/containers/dataset/new-dataset.component.html
+++ b/client/src/app/admin/instance/dataset/containers/new-dataset.component.html
@@ -2,10 +2,10 @@
     <nav aria-label="breadcrumb">
         <ol class="breadcrumb">
             <li class="breadcrumb-item">
-                <a routerLink="/admin/instance-list">Instances</a>
+                <a routerLink="/admin/instance/instance-list">Instances</a>
             </li>
             <li class="breadcrumb-item active" aria-current="page">
-                <a routerLink="/admin/configure-instance/{{ (instance | async).name }}">
+                <a routerLink="/admin/instance/configure-instance/{{ (instance | async).name }}">
                     Configure instance {{ (instance | async).name }}
                 </a>
             </li>
@@ -38,7 +38,7 @@
                     <span class="fa fa-database"></span> Add new dataset
                 </button>
                 &nbsp;
-                <a routerLink="/admin/configure-instance/{{ (instance | async).name }}" type="button" class="btn btn-danger">Cancel</a>
+                <a routerLink="/admin/instance/configure-instance/{{ (instance | async).name }}" type="button" class="btn btn-danger">Cancel</a>
             </app-dataset-form>
         </div>
     </div>
diff --git a/client/src/app/admin/containers/dataset/new-dataset.component.ts b/client/src/app/admin/instance/dataset/containers/new-dataset.component.ts
similarity index 100%
rename from client/src/app/admin/containers/dataset/new-dataset.component.ts
rename to client/src/app/admin/instance/dataset/containers/new-dataset.component.ts
diff --git a/client/src/app/admin/instance/dataset/dataset-routing.module.ts b/client/src/app/admin/instance/dataset/dataset-routing.module.ts
new file mode 100644
index 0000000000000000000000000000000000000000..5779ddc77cd552c295f7506e3da3d7ebda1e10ac
--- /dev/null
+++ b/client/src/app/admin/instance/dataset/dataset-routing.module.ts
@@ -0,0 +1,40 @@
+/**
+ * This file is part of Anis Client.
+ *
+ * @copyright Laboratoire d'Astrophysique de Marseille / CNRS
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+import { NgModule } from '@angular/core';
+import { Routes, RouterModule } from '@angular/router';
+
+import { DatasetListComponent } from './containers/dataset-list.component';
+import { NewDatasetComponent } from './containers/new-dataset.component';
+import { EditDatasetComponent } from './containers/edit-dataset.component';
+import { AttributeListComponent } from './containers/attribute-list.component';
+
+const routes: Routes = [
+    { path: 'dataset-list', component: DatasetListComponent },
+    { path: 'new-dataset', component: NewDatasetComponent },
+    { path: 'edit-dataset/:dname', component: EditDatasetComponent },
+    { path: 'configure-dataset/:dname', component: AttributeListComponent },
+];
+
+/**
+ * @class
+ * @classdesc Dataset routing module.
+ */
+@NgModule({
+    imports: [RouterModule.forChild(routes)],
+    exports: [RouterModule]
+})
+export class DatasetRoutingModule { }
+
+export const routedComponents = [
+    DatasetListComponent,
+    NewDatasetComponent,
+    EditDatasetComponent,
+    AttributeListComponent
+];
diff --git a/client/src/app/admin/instance/dataset/dataset.module.ts b/client/src/app/admin/instance/dataset/dataset.module.ts
new file mode 100644
index 0000000000000000000000000000000000000000..a5d038a8861c368d37f08c8c9374ad251668202a
--- /dev/null
+++ b/client/src/app/admin/instance/dataset/dataset.module.ts
@@ -0,0 +1,33 @@
+/**
+ * This file is part of Anis Client.
+ *
+ * @copyright Laboratoire d'Astrophysique de Marseille / CNRS
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+import { NgModule } from '@angular/core';
+
+import { SharedModule } from 'src/app/shared/shared.module';
+import { DatasetRoutingModule, routedComponents } from './dataset-routing.module';
+import { dummiesComponents } from './components';
+
+import { AdminSharedModule } from '../../admin-shared/admin-shared.module';
+
+/**
+ * @class
+ * @classdesc Dataset module.
+ */
+@NgModule({
+    imports: [
+        SharedModule,
+        DatasetRoutingModule,
+        AdminSharedModule
+    ],
+    declarations: [
+        routedComponents,
+        dummiesComponents
+    ]
+})
+export class DatasetModule { }
diff --git a/client/src/app/admin/components/group/group-form.component.html b/client/src/app/admin/instance/group/components/group-form.component.html
similarity index 100%
rename from client/src/app/admin/components/group/group-form.component.html
rename to client/src/app/admin/instance/group/components/group-form.component.html
diff --git a/client/src/app/admin/components/group/group-form.component.ts b/client/src/app/admin/instance/group/components/group-form.component.ts
similarity index 100%
rename from client/src/app/admin/components/group/group-form.component.ts
rename to client/src/app/admin/instance/group/components/group-form.component.ts
diff --git a/client/src/app/admin/components/group/group-table.component.html b/client/src/app/admin/instance/group/components/group-table.component.html
similarity index 91%
rename from client/src/app/admin/components/group/group-table.component.html
rename to client/src/app/admin/instance/group/components/group-table.component.html
index a726b773bf40fa02614716bc95fea35ff879ae23..63a6de93cd09a1de7e3353af2bcdfa1d14d3e09b 100644
--- a/client/src/app/admin/components/group/group-table.component.html
+++ b/client/src/app/admin/instance/group/components/group-table.component.html
@@ -21,7 +21,7 @@
                     </span>
                 </td>
                 <td class="align-middle">
-                    <a title="Edit this group" routerLink="../edit-group/{{group.id}}" class="btn btn-outline-primary">
+                    <a title="Edit this group" routerLink="edit-group/{{group.id}}" class="btn btn-outline-primary">
                         <span class="fas fa-edit"></span>
                     </a>
                     &nbsp;
diff --git a/client/src/app/admin/components/group/group-table.component.ts b/client/src/app/admin/instance/group/components/group-table.component.ts
similarity index 100%
rename from client/src/app/admin/components/group/group-table.component.ts
rename to client/src/app/admin/instance/group/components/group-table.component.ts
diff --git a/client/src/app/admin/components/group/index.ts b/client/src/app/admin/instance/group/components/index.ts
similarity index 92%
rename from client/src/app/admin/components/group/index.ts
rename to client/src/app/admin/instance/group/components/index.ts
index db396493fc50755a69463db271e42906f93805f5..c4d64a0fcdf95218b7b32c097dca1bb30f2822b1 100644
--- a/client/src/app/admin/components/group/index.ts
+++ b/client/src/app/admin/instance/group/components/index.ts
@@ -10,7 +10,7 @@
 import { GroupTableComponent } from "./group-table.component";
 import { GroupFormComponent } from "./group-form.component";
 
-export const groupComponents = [
+export const dummiesComponents = [
     GroupTableComponent,
     GroupFormComponent
 ];
diff --git a/client/src/app/admin/containers/group/edit-group.component.html b/client/src/app/admin/instance/group/containers/edit-group.component.html
similarity index 76%
rename from client/src/app/admin/containers/group/edit-group.component.html
rename to client/src/app/admin/instance/group/containers/edit-group.component.html
index 54f84ec340bd5d377056ee6bbe55af284d7cfba4..d608cb7544d7f3643f044e89225887da3a603f54 100644
--- a/client/src/app/admin/containers/group/edit-group.component.html
+++ b/client/src/app/admin/instance/group/containers/edit-group.component.html
@@ -2,17 +2,17 @@
     <nav aria-label="breadcrumb">
         <ol class="breadcrumb">
             <li class="breadcrumb-item">
-                <a routerLink="/admin/instance-list">
+                <a routerLink="/admin/instance/instance-list">
                     Instances
                 </a>
             </li>
             <li class="breadcrumb-item">
-                <a routerLink="/admin//configure-instance/{{ instanceName | async }}">
+                <a routerLink="/admin/instance/configure-instance/{{ instanceName | async }}">
                     Configure instance {{ instanceName | async }}
                 </a>
             </li>
             <li class="breadcrumb-item" aria-current="page">
-                <a routerLink="/admin/configure-instance/{{ instanceName | async }}/group">
+                <a routerLink="/admin/instance/configure-instance/{{ instanceName | async }}/group">
                     Groups
                 </a>
             </li>
@@ -31,7 +31,7 @@
                     <span class="fa fa-database"></span> Update group information
                 </button>
                 &nbsp;
-                <a routerLink="/admin/configure-instance/{{ instanceName | async }}/group" role="button" class="btn btn-danger">Cancel</a>
+                <a routerLink="/admin/instance/configure-instance/{{ instanceName | async }}/group" role="button" class="btn btn-danger">Cancel</a>
             </app-group-form>
         </div>
     </div>
diff --git a/client/src/app/admin/containers/group/edit-group.component.ts b/client/src/app/admin/instance/group/containers/edit-group.component.ts
similarity index 97%
rename from client/src/app/admin/containers/group/edit-group.component.ts
rename to client/src/app/admin/instance/group/containers/edit-group.component.ts
index 00df170e623d3cad4f9ade089b41d3c94466a4ea..8346686e94028f9f2446fd1cd1b8070ae1f4d271 100644
--- a/client/src/app/admin/containers/group/edit-group.component.ts
+++ b/client/src/app/admin/instance/group/containers/edit-group.component.ts
@@ -7,7 +7,7 @@
  * file that was distributed with this source code.
  */
 
-import { Component, OnInit} from '@angular/core';
+import { Component } from '@angular/core';
 import { Observable } from 'rxjs';
 import { Store } from '@ngrx/store';
 
diff --git a/client/src/app/admin/containers/group/group-list.component.html b/client/src/app/admin/instance/group/containers/group-list.component.html
similarity index 84%
rename from client/src/app/admin/containers/group/group-list.component.html
rename to client/src/app/admin/instance/group/containers/group-list.component.html
index 2f0fcffeb2547f476486e04023a7abff8d36c438..c6f931f18abe98c11c03aedce6e15ba3564898fc 100644
--- a/client/src/app/admin/containers/group/group-list.component.html
+++ b/client/src/app/admin/instance/group/containers/group-list.component.html
@@ -2,12 +2,12 @@
     <nav aria-label="breadcrumb">
         <ol class="breadcrumb">
             <li class="breadcrumb-item">
-                <a routerLink="/admin/instance-list">
+                <a routerLink="/admin/instance/instance-list">
                     Instances
                 </a>
             </li>
             <li class="breadcrumb-item">
-                <a routerLink="/admin/configure-instance/{{ instanceName | async }}">
+                <a routerLink="/admin/instance/configure-instance/{{ instanceName | async }}">
                     Configure instance {{ instanceName | async }}
                 </a>
             </li>
@@ -20,7 +20,7 @@
     <ng-container *ngIf="groupListIsLoaded | async">
         <div class="row">
             <div class="col-12">
-                <button title="Add a new group" class="btn btn-outline-success float-right" routerLink="../new-group">
+                <button title="Add a new group" class="btn btn-outline-success float-right" routerLink="new-group">
                     <span class="fas fa-plus"></span> New group
                 </button>
             </div>
diff --git a/client/src/app/admin/containers/group/group-list.component.ts b/client/src/app/admin/instance/group/containers/group-list.component.ts
similarity index 100%
rename from client/src/app/admin/containers/group/group-list.component.ts
rename to client/src/app/admin/instance/group/containers/group-list.component.ts
diff --git a/client/src/app/admin/containers/group/new-group.component.html b/client/src/app/admin/instance/group/containers/new-group.component.html
similarity index 74%
rename from client/src/app/admin/containers/group/new-group.component.html
rename to client/src/app/admin/instance/group/containers/new-group.component.html
index 78a687bc4fb9054e42b3f5dda13a55a17347f814..2bf8bf946b4a0bda180836c1fb07f50bfe5acc71 100644
--- a/client/src/app/admin/containers/group/new-group.component.html
+++ b/client/src/app/admin/instance/group/containers/new-group.component.html
@@ -2,17 +2,17 @@
     <nav aria-label="breadcrumb">
         <ol class="breadcrumb">
             <li class="breadcrumb-item">
-                <a routerLink="/admin/instance-list">
+                <a routerLink="/admin/instance/instance-list">
                     Instances
                 </a>
             </li>
             <li class="breadcrumb-item">
-                <a routerLink="/admin/configure-instance/{{ instanceName | async }}">
+                <a routerLink="/admin/instance/configure-instance/{{ instanceName | async }}">
                     Configure instance {{ instanceName | async }}
                 </a>
             </li>
             <li class="breadcrumb-item" aria-current="page">
-                <a routerLink="/admin/configure-instance/{{ instanceName | async }}/group">
+                <a routerLink="/admin/instance/configure-instance/{{ instanceName | async }}/group">
                     Groups
                 </a>
             </li>
@@ -31,7 +31,7 @@
                     <span class="fa fa-database"></span> Add the new group
                 </button>
                 &nbsp;
-                <a routerLink="/admin/configure-instance/{{ instanceName | async }}/group" type="button" class="btn btn-danger">Cancel</a>
+                <a routerLink="/admin/instance/configure-instance/{{ instanceName | async }}/group" type="button" class="btn btn-danger">Cancel</a>
             </app-group-form>
         </div>
     </div>
diff --git a/client/src/app/admin/containers/group/new-group.component.ts b/client/src/app/admin/instance/group/containers/new-group.component.ts
similarity index 100%
rename from client/src/app/admin/containers/group/new-group.component.ts
rename to client/src/app/admin/instance/group/containers/new-group.component.ts
diff --git a/client/src/app/admin/instance/group/group-routing.module.ts b/client/src/app/admin/instance/group/group-routing.module.ts
new file mode 100644
index 0000000000000000000000000000000000000000..cda0e26a0c5aad9506a5853a052b6c6d731cc1cb
--- /dev/null
+++ b/client/src/app/admin/instance/group/group-routing.module.ts
@@ -0,0 +1,37 @@
+/**
+ * This file is part of Anis Client.
+ *
+ * @copyright Laboratoire d'Astrophysique de Marseille / CNRS
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+import { NgModule } from '@angular/core';
+import { Routes, RouterModule } from '@angular/router';
+
+import { GroupListComponent } from './containers/group-list.component';
+import { NewGroupComponent } from './containers/new-group.component';
+import { EditGroupComponent } from './containers/edit-group.component';
+
+const routes: Routes = [
+    { path: '', component: GroupListComponent },
+    { path: 'new-group', component: NewGroupComponent },
+    { path: 'edit-group/:id', component: EditGroupComponent },
+];
+
+/**
+ * @class
+ * @classdesc Group routing module.
+ */
+@NgModule({
+    imports: [RouterModule.forChild(routes)],
+    exports: [RouterModule]
+})
+export class GroupRoutingModule { }
+
+export const routedComponents = [
+    GroupListComponent,
+    NewGroupComponent,
+    EditGroupComponent
+];
diff --git a/client/src/app/admin/instance/group/group.module.ts b/client/src/app/admin/instance/group/group.module.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e579ac147d0ead3ad80b965a547d3b494616e381
--- /dev/null
+++ b/client/src/app/admin/instance/group/group.module.ts
@@ -0,0 +1,33 @@
+/**
+ * This file is part of Anis Client.
+ *
+ * @copyright Laboratoire d'Astrophysique de Marseille / CNRS
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+import { NgModule } from '@angular/core';
+
+import { SharedModule } from 'src/app/shared/shared.module';
+import { GroupRoutingModule, routedComponents } from './group-routing.module';
+import { dummiesComponents } from './components';
+
+import { AdminSharedModule } from '../../admin-shared/admin-shared.module';
+
+/**
+ * @class
+ * @classdesc Instance module.
+ */
+@NgModule({
+    imports: [
+        SharedModule,
+        GroupRoutingModule,
+        AdminSharedModule
+    ],
+    declarations: [
+        routedComponents,
+        dummiesComponents
+    ]
+})
+export class GroupModule { }
diff --git a/client/src/app/admin/instance/instance-routing.module.ts b/client/src/app/admin/instance/instance-routing.module.ts
new file mode 100644
index 0000000000000000000000000000000000000000..7c16051131cf263186bafaf727345d0c02ad088d
--- /dev/null
+++ b/client/src/app/admin/instance/instance-routing.module.ts
@@ -0,0 +1,46 @@
+/**
+ * This file is part of Anis Client.
+ *
+ * @copyright Laboratoire d'Astrophysique de Marseille / CNRS
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+import { NgModule } from '@angular/core';
+import { Routes, RouterModule } from '@angular/router';
+
+import { InstanceListComponent } from './containers/instance-list.component';
+import { NewInstanceComponent } from './containers/new-instance.component';
+import { EditInstanceComponent } from './containers/edit-instance.component';
+import { ConfigureInstanceComponent } from './containers/configure-instance.component';
+
+const routes: Routes = [
+    { path: 'instance-list', component: InstanceListComponent },
+    { path: 'new-instance', component: NewInstanceComponent },
+    { path: 'edit-instance/:iname', component: EditInstanceComponent },
+    { path: 'configure-instance/:iname', component: ConfigureInstanceComponent, children: 
+        [
+            { path: '', redirectTo: 'dataset/dataset-list', pathMatch: 'full' },
+            { path: 'group', loadChildren: () => import('./group/group.module').then(m => m.GroupModule) },
+            { path: 'dataset', loadChildren: () => import('./dataset/dataset.module').then(m => m.DatasetModule) }
+        ]
+    },
+];
+
+/**
+ * @class
+ * @classdesc Instance routing module.
+ */
+@NgModule({
+    imports: [RouterModule.forChild(routes)],
+    exports: [RouterModule]
+})
+export class InstanceRoutingModule { }
+
+export const routedComponents = [
+    InstanceListComponent,
+    NewInstanceComponent,
+    EditInstanceComponent,
+    ConfigureInstanceComponent
+];
diff --git a/client/src/app/admin/instance/instance.module.ts b/client/src/app/admin/instance/instance.module.ts
new file mode 100644
index 0000000000000000000000000000000000000000..f5dd4e7a3fa184bb176bc1bb9822900d27b773f6
--- /dev/null
+++ b/client/src/app/admin/instance/instance.module.ts
@@ -0,0 +1,33 @@
+/**
+ * This file is part of Anis Client.
+ *
+ * @copyright Laboratoire d'Astrophysique de Marseille / CNRS
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+import { NgModule } from '@angular/core';
+
+import { SharedModule } from 'src/app/shared/shared.module';
+import { InstanceRoutingModule, routedComponents } from './instance-routing.module';
+import { dummiesComponents } from './components';
+
+import { AdminSharedModule } from '../admin-shared/admin-shared.module';
+
+/**
+ * @class
+ * @classdesc Instance module.
+ */
+@NgModule({
+    imports: [
+        SharedModule,
+        InstanceRoutingModule,
+        AdminSharedModule
+    ],
+    declarations: [
+        routedComponents,
+        dummiesComponents
+    ]
+})
+export class InstanceModule { }
diff --git a/client/src/app/admin/components/settings/add-option.component.html b/client/src/app/admin/settings/components/add-option.component.html
similarity index 100%
rename from client/src/app/admin/components/settings/add-option.component.html
rename to client/src/app/admin/settings/components/add-option.component.html
diff --git a/client/src/app/admin/components/settings/add-option.component.ts b/client/src/app/admin/settings/components/add-option.component.ts
similarity index 100%
rename from client/src/app/admin/components/settings/add-option.component.ts
rename to client/src/app/admin/settings/components/add-option.component.ts
diff --git a/client/src/app/admin/components/settings/edit-option.component.html b/client/src/app/admin/settings/components/edit-option.component.html
similarity index 100%
rename from client/src/app/admin/components/settings/edit-option.component.html
rename to client/src/app/admin/settings/components/edit-option.component.html
diff --git a/client/src/app/admin/components/settings/edit-option.component.ts b/client/src/app/admin/settings/components/edit-option.component.ts
similarity index 100%
rename from client/src/app/admin/components/settings/edit-option.component.ts
rename to client/src/app/admin/settings/components/edit-option.component.ts
diff --git a/client/src/app/admin/components/settings/edit-select.component.html b/client/src/app/admin/settings/components/edit-select.component.html
similarity index 100%
rename from client/src/app/admin/components/settings/edit-select.component.html
rename to client/src/app/admin/settings/components/edit-select.component.html
diff --git a/client/src/app/admin/components/settings/edit-select.component.ts b/client/src/app/admin/settings/components/edit-select.component.ts
similarity index 100%
rename from client/src/app/admin/components/settings/edit-select.component.ts
rename to client/src/app/admin/settings/components/edit-select.component.ts
diff --git a/client/src/app/admin/components/settings/form-option.component.html b/client/src/app/admin/settings/components/form-option.component.html
similarity index 100%
rename from client/src/app/admin/components/settings/form-option.component.html
rename to client/src/app/admin/settings/components/form-option.component.html
diff --git a/client/src/app/admin/components/settings/form-option.component.ts b/client/src/app/admin/settings/components/form-option.component.ts
similarity index 100%
rename from client/src/app/admin/components/settings/form-option.component.ts
rename to client/src/app/admin/settings/components/form-option.component.ts
diff --git a/client/src/app/admin/components/settings/form-select.component.html b/client/src/app/admin/settings/components/form-select.component.html
similarity index 100%
rename from client/src/app/admin/components/settings/form-select.component.html
rename to client/src/app/admin/settings/components/form-select.component.html
diff --git a/client/src/app/admin/components/settings/form-select.component.ts b/client/src/app/admin/settings/components/form-select.component.ts
similarity index 100%
rename from client/src/app/admin/components/settings/form-select.component.ts
rename to client/src/app/admin/settings/components/form-select.component.ts
diff --git a/client/src/app/admin/components/settings/index.ts b/client/src/app/admin/settings/components/index.ts
similarity index 96%
rename from client/src/app/admin/components/settings/index.ts
rename to client/src/app/admin/settings/components/index.ts
index 5e184795e60ea94c0b34adb20af6299ad3627746..bd52c048c8e15f7ae5381e8bca179cd641836b4a 100644
--- a/client/src/app/admin/components/settings/index.ts
+++ b/client/src/app/admin/settings/components/index.ts
@@ -16,7 +16,7 @@ import { OptionTableComponent } from "./option-table.component";
 import { FormSelectComponent } from "./form-select.component";
 import { FormOptionComponent } from "./form-option.component";
 
-export const settingsComponents = [
+export const dummiesComponents = [
     SelectListComponent,
     SelectButtonsComponent,
     EditSelectComponent,
diff --git a/client/src/app/admin/components/settings/option-table.component.html b/client/src/app/admin/settings/components/option-table.component.html
similarity index 100%
rename from client/src/app/admin/components/settings/option-table.component.html
rename to client/src/app/admin/settings/components/option-table.component.html
diff --git a/client/src/app/admin/components/settings/option-table.component.ts b/client/src/app/admin/settings/components/option-table.component.ts
similarity index 100%
rename from client/src/app/admin/components/settings/option-table.component.ts
rename to client/src/app/admin/settings/components/option-table.component.ts
diff --git a/client/src/app/admin/components/settings/select-buttons.component.html b/client/src/app/admin/settings/components/select-buttons.component.html
similarity index 100%
rename from client/src/app/admin/components/settings/select-buttons.component.html
rename to client/src/app/admin/settings/components/select-buttons.component.html
diff --git a/client/src/app/admin/components/settings/select-buttons.component.ts b/client/src/app/admin/settings/components/select-buttons.component.ts
similarity index 100%
rename from client/src/app/admin/components/settings/select-buttons.component.ts
rename to client/src/app/admin/settings/components/select-buttons.component.ts
diff --git a/client/src/app/admin/components/settings/select-list.component.html b/client/src/app/admin/settings/components/select-list.component.html
similarity index 100%
rename from client/src/app/admin/components/settings/select-list.component.html
rename to client/src/app/admin/settings/components/select-list.component.html
diff --git a/client/src/app/admin/components/settings/select-list.component.ts b/client/src/app/admin/settings/components/select-list.component.ts
similarity index 100%
rename from client/src/app/admin/components/settings/select-list.component.ts
rename to client/src/app/admin/settings/components/select-list.component.ts
diff --git a/client/src/app/admin/containers/settings/settings.component.html b/client/src/app/admin/settings/containers/settings.component.html
similarity index 100%
rename from client/src/app/admin/containers/settings/settings.component.html
rename to client/src/app/admin/settings/containers/settings.component.html
diff --git a/client/src/app/admin/containers/settings/settings.component.ts b/client/src/app/admin/settings/containers/settings.component.ts
similarity index 100%
rename from client/src/app/admin/containers/settings/settings.component.ts
rename to client/src/app/admin/settings/containers/settings.component.ts
diff --git a/client/src/app/admin/settings/settings-routing.module.ts b/client/src/app/admin/settings/settings-routing.module.ts
new file mode 100644
index 0000000000000000000000000000000000000000..9a885838c0c45707843f28d9345b235da873a9a4
--- /dev/null
+++ b/client/src/app/admin/settings/settings-routing.module.ts
@@ -0,0 +1,32 @@
+/**
+ * This file is part of Anis Client.
+ *
+ * @copyright Laboratoire d'Astrophysique de Marseille / CNRS
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+import { NgModule } from '@angular/core';
+import { Routes, RouterModule } from '@angular/router';
+
+import { SettingsComponent } from './containers/settings.component';
+
+const routes: Routes = [
+    { path: '', component: SettingsComponent },
+    { path: ':select', component: SettingsComponent }
+];
+
+/**
+ * @class
+ * @classdesc Settings routing module.
+ */
+@NgModule({
+    imports: [RouterModule.forChild(routes)],
+    exports: [RouterModule]
+})
+export class SettingsRoutingModule { }
+
+export const routedComponents = [
+    SettingsComponent
+];
diff --git a/client/src/app/admin/settings/settings.module.ts b/client/src/app/admin/settings/settings.module.ts
new file mode 100644
index 0000000000000000000000000000000000000000..4160042fe01e01957e6d56be495f613b7599b2fb
--- /dev/null
+++ b/client/src/app/admin/settings/settings.module.ts
@@ -0,0 +1,33 @@
+/**
+ * This file is part of Anis Client.
+ *
+ * @copyright Laboratoire d'Astrophysique de Marseille / CNRS
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+import { NgModule } from '@angular/core';
+
+import { SharedModule } from 'src/app/shared/shared.module';
+import { SettingsRoutingModule, routedComponents } from './settings-routing.module';
+import { dummiesComponents } from './components';
+
+import { AdminSharedModule } from '../admin-shared/admin-shared.module';
+
+/**
+ * @class
+ * @classdesc Settings module.
+ */
+@NgModule({
+    imports: [
+        SharedModule,
+        SettingsRoutingModule,
+        AdminSharedModule
+    ],
+    declarations: [
+        routedComponents,
+        dummiesComponents
+    ]
+})
+export class SettingsModule { }
diff --git a/client/src/app/admin/components/survey/index.ts b/client/src/app/admin/survey/components/index.ts
similarity index 92%
rename from client/src/app/admin/components/survey/index.ts
rename to client/src/app/admin/survey/components/index.ts
index 3ef0306aa42c2a96d0fdb2798c229e83b404faaa..c0cb4786cf8150ec4a5d3dfd8c12a9bc7028092f 100644
--- a/client/src/app/admin/components/survey/index.ts
+++ b/client/src/app/admin/survey/components/index.ts
@@ -10,7 +10,7 @@
 import { SurveyTableComponent } from "./survey-table.component";
 import { SurveyFormComponent } from "./survey-form.component";
 
-export const surveyComponents = [
+export const dummiesComponents = [
     SurveyTableComponent,
     SurveyFormComponent
 ];
diff --git a/client/src/app/admin/components/survey/survey-form.component.html b/client/src/app/admin/survey/components/survey-form.component.html
similarity index 100%
rename from client/src/app/admin/components/survey/survey-form.component.html
rename to client/src/app/admin/survey/components/survey-form.component.html
diff --git a/client/src/app/admin/components/survey/survey-form.component.ts b/client/src/app/admin/survey/components/survey-form.component.ts
similarity index 100%
rename from client/src/app/admin/components/survey/survey-form.component.ts
rename to client/src/app/admin/survey/components/survey-form.component.ts
diff --git a/client/src/app/admin/components/survey/survey-table.component.html b/client/src/app/admin/survey/components/survey-table.component.html
similarity index 96%
rename from client/src/app/admin/components/survey/survey-table.component.html
rename to client/src/app/admin/survey/components/survey-table.component.html
index afb4480a4bd56cdffa8e440f7882ea7692414c8b..d537039f9e6f45496fa39539dfb1640fea52e2eb 100644
--- a/client/src/app/admin/components/survey/survey-table.component.html
+++ b/client/src/app/admin/survey/components/survey-table.component.html
@@ -23,7 +23,7 @@
                 <td class="align-middle">{{ getDatabaseById(survey.id_database).label }}</td>
                 <td class="align-middle">{{ survey.nb_datasets }}</td>
                 <td class="align-middle">
-                    <a title="Edit this survey" routerLink="/admin/edit-survey/{{survey.name}}" class="btn btn-outline-primary">
+                    <a title="Edit this survey" routerLink="/admin/survey/edit-survey/{{survey.name}}" class="btn btn-outline-primary">
                         <span class="fas fa-edit"></span>
                     </a>
                 </td>
diff --git a/client/src/app/admin/components/survey/survey-table.component.ts b/client/src/app/admin/survey/components/survey-table.component.ts
similarity index 100%
rename from client/src/app/admin/components/survey/survey-table.component.ts
rename to client/src/app/admin/survey/components/survey-table.component.ts
diff --git a/client/src/app/admin/containers/survey/edit-survey.component.html b/client/src/app/admin/survey/containers/edit-survey.component.html
similarity index 88%
rename from client/src/app/admin/containers/survey/edit-survey.component.html
rename to client/src/app/admin/survey/containers/edit-survey.component.html
index bf635afe45d5a22588d22465254775a26973a1ff..2f80c1d98633f1ac4c1b527bf74e867746d0c80e 100644
--- a/client/src/app/admin/containers/survey/edit-survey.component.html
+++ b/client/src/app/admin/survey/containers/edit-survey.component.html
@@ -1,7 +1,7 @@
 <div class="container-fluid">
     <nav aria-label="breadcrumb">
         <ol class="breadcrumb">
-            <li class="breadcrumb-item"><a routerLink="/admin/survey-list">Surveys</a></li>
+            <li class="breadcrumb-item"><a routerLink="/admin/survey/survey-list">Surveys</a></li>
             <li *ngIf="(surveyListIsLoaded | async)" class="breadcrumb-item active" aria-current="page">Edit survey {{ (survey | async).name }}</li>
         </ol>
     </nav>
@@ -17,7 +17,7 @@
                     <span class="fa fa-database"></span> Update survey information
                 </button>
                 &nbsp;
-                <a routerLink="/admin/survey-list" type="button" class="btn btn-danger">Cancel</a>
+                <a routerLink="/admin/survey/survey-list" type="button" class="btn btn-danger">Cancel</a>
             </app-survey-form>
         </div>
     </div>
diff --git a/client/src/app/admin/containers/survey/edit-survey.component.ts b/client/src/app/admin/survey/containers/edit-survey.component.ts
similarity index 97%
rename from client/src/app/admin/containers/survey/edit-survey.component.ts
rename to client/src/app/admin/survey/containers/edit-survey.component.ts
index 31728f2e0b1f8dc880185d667c89cbeeaf8b2cfe..e25e02245f1df6479022ccfa8c806949ee609fac 100644
--- a/client/src/app/admin/containers/survey/edit-survey.component.ts
+++ b/client/src/app/admin/survey/containers/edit-survey.component.ts
@@ -7,7 +7,7 @@
  * file that was distributed with this source code.
  */
 
-import { Component, OnInit} from '@angular/core';
+import { Component } from '@angular/core';
 import { Observable } from 'rxjs';
 import { Store } from '@ngrx/store';
 
diff --git a/client/src/app/admin/containers/survey/new-survey.component.html b/client/src/app/admin/survey/containers/new-survey.component.html
similarity index 86%
rename from client/src/app/admin/containers/survey/new-survey.component.html
rename to client/src/app/admin/survey/containers/new-survey.component.html
index 4b87715e3552f30bb2155b3fe0c0f08b7a92c563..b89b789989193af252d63ee0d57256aa87b2d1e4 100644
--- a/client/src/app/admin/containers/survey/new-survey.component.html
+++ b/client/src/app/admin/survey/containers/new-survey.component.html
@@ -1,7 +1,7 @@
 <div class="container-fluid">
     <nav aria-label="breadcrumb">
         <ol class="breadcrumb">
-            <li class="breadcrumb-item"><a routerLink="/admin/survey-list">Surveys</a></li>
+            <li class="breadcrumb-item"><a routerLink="/admin/survey/survey-list">Surveys</a></li>
             <li class="breadcrumb-item active" aria-current="page">New survey</li>
         </ol>
     </nav>
@@ -17,7 +17,7 @@
                     <span class="fa fa-database"></span> Add the new survey
                 </button>
                 &nbsp;
-                <a routerLink="/admin/survey-list" type="button" class="btn btn-danger">Cancel</a>
+                <a routerLink="/admin/survey/survey-list" type="button" class="btn btn-danger">Cancel</a>
             </app-survey-form>
         </div>
     </div>
diff --git a/client/src/app/admin/containers/survey/new-survey.component.ts b/client/src/app/admin/survey/containers/new-survey.component.ts
similarity index 100%
rename from client/src/app/admin/containers/survey/new-survey.component.ts
rename to client/src/app/admin/survey/containers/new-survey.component.ts
diff --git a/client/src/app/admin/containers/survey/survey-list.component.html b/client/src/app/admin/survey/containers/survey-list.component.html
similarity index 93%
rename from client/src/app/admin/containers/survey/survey-list.component.html
rename to client/src/app/admin/survey/containers/survey-list.component.html
index ed7ebd05540d31a89d083784e216eccf89140438..2dd778cc4f7547c518c1b5d0a5dd5835e31852ed 100644
--- a/client/src/app/admin/containers/survey/survey-list.component.html
+++ b/client/src/app/admin/survey/containers/survey-list.component.html
@@ -10,7 +10,7 @@
     <ng-container *ngIf="(surveyListIsLoaded | async) && (databaseListIsLoaded | async)">
         <div class="row">
             <div class="col-12">
-                <button title="Add a new survey" class="btn btn-outline-success float-right" routerLink="/admin/new-survey">
+                <button title="Add a new survey" class="btn btn-outline-success float-right" routerLink="/admin/survey/new-survey">
                     <span class="fas fa-plus"></span> New survey
                 </button>
             </div>
diff --git a/client/src/app/admin/containers/survey/survey-list.component.ts b/client/src/app/admin/survey/containers/survey-list.component.ts
similarity index 100%
rename from client/src/app/admin/containers/survey/survey-list.component.ts
rename to client/src/app/admin/survey/containers/survey-list.component.ts
diff --git a/client/src/app/admin/survey/survey-routing.module.ts b/client/src/app/admin/survey/survey-routing.module.ts
new file mode 100644
index 0000000000000000000000000000000000000000..0cf63471c4e80bcf501b20c6a0dd439f45e5a37b
--- /dev/null
+++ b/client/src/app/admin/survey/survey-routing.module.ts
@@ -0,0 +1,37 @@
+/**
+ * This file is part of Anis Client.
+ *
+ * @copyright Laboratoire d'Astrophysique de Marseille / CNRS
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+import { NgModule } from '@angular/core';
+import { Routes, RouterModule } from '@angular/router';
+
+import { SurveyListComponent } from './containers/survey-list.component';
+import { NewSurveyComponent } from './containers/new-survey.component';
+import { EditSurveyComponent } from './containers/edit-survey.component';
+
+const routes: Routes = [
+    { path: 'survey-list', component: SurveyListComponent },
+    { path: 'new-survey', component: NewSurveyComponent },
+    { path: 'edit-survey/:name', component: EditSurveyComponent }
+];
+
+/**
+ * @class
+ * @classdesc Survey routing module.
+ */
+@NgModule({
+    imports: [RouterModule.forChild(routes)],
+    exports: [RouterModule]
+})
+export class SurveyRoutingModule { }
+
+export const routedComponents = [
+    SurveyListComponent,
+    NewSurveyComponent,
+    EditSurveyComponent
+];
diff --git a/client/src/app/admin/survey/survey.module.ts b/client/src/app/admin/survey/survey.module.ts
new file mode 100644
index 0000000000000000000000000000000000000000..44ae22dd9ce44ec49bb29508c3fbcaef577fa23a
--- /dev/null
+++ b/client/src/app/admin/survey/survey.module.ts
@@ -0,0 +1,33 @@
+/**
+ * This file is part of Anis Client.
+ *
+ * @copyright Laboratoire d'Astrophysique de Marseille / CNRS
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+import { NgModule } from '@angular/core';
+
+import { SharedModule } from 'src/app/shared/shared.module';
+import { SurveyRoutingModule, routedComponents } from './survey-routing.module';
+import { dummiesComponents } from './components';
+
+import { AdminSharedModule } from '../admin-shared/admin-shared.module';
+
+/**
+ * @class
+ * @classdesc Settings module.
+ */
+@NgModule({
+    imports: [
+        SharedModule,
+        SurveyRoutingModule,
+        AdminSharedModule
+    ],
+    declarations: [
+        routedComponents,
+        dummiesComponents
+    ]
+})
+export class SurveyModule { }
diff --git a/client/src/app/app-init.ts b/client/src/app/app-init.ts
index c890b1abb2cb86f16ed92089d3e8e80452715457..9d89f658bae0da283130271e2c7e290bbfc85422 100644
--- a/client/src/app/app-init.ts
+++ b/client/src/app/app-init.ts
@@ -26,7 +26,7 @@ function getClientSettingsUrl() {
     if (environment.production) {
         url = `${document.getElementsByTagName('base')[0].getAttribute('href')}${environment.apiUrl}/client-settings`;
     } else {
-        url = environment.apiUrl;
+        url = `${environment.apiUrl}/client-settings`;
     }
     return url;
 }
diff --git a/client/src/app/auth/auth.effects.ts b/client/src/app/auth/auth.effects.ts
index bdb76a950fa0644e54dba3b9add95f7061e884bd..5622d78917dd0483eabb6ac1471499babe8daa54 100644
--- a/client/src/app/auth/auth.effects.ts
+++ b/client/src/app/auth/auth.effects.ts
@@ -10,7 +10,7 @@
 import { Injectable } from '@angular/core';
 import { Actions, createEffect, ofType } from '@ngrx/effects';
 import { from } from 'rxjs';
-import { tap, switchMap, withLatestFrom } from 'rxjs/operators';
+import { tap, switchMap } from 'rxjs/operators';
 
 import { KeycloakService } from 'keycloak-angular';
 
@@ -61,7 +61,7 @@ export class AuthEffects {
     openEditProfile$ =  createEffect(() =>
         this.actions$.pipe(
             ofType(authActions.openEditProfile),
-            tap(_ => window.open(this.config.ssoAuthUrl + '/realms/' + this.config.ssoRealm + '/account', '_blank'))        
+            tap(_ => window.open(`${this.config.ssoAuthUrl}/realms/${this.config.ssoRealm}/account`, '_blank'))        
         ),
         { dispatch: false }
     );
diff --git a/client/src/app/core/containers/app.component.ts b/client/src/app/core/containers/app.component.ts
index 713bf7fe3adf636e17b656cca37f99325a42a995..8a49719a02a19021df3060b4e2a8cbeebae5c243 100644
--- a/client/src/app/core/containers/app.component.ts
+++ b/client/src/app/core/containers/app.component.ts
@@ -13,13 +13,13 @@ import { Store } from '@ngrx/store';
 import { Observable } from 'rxjs';
 import { map } from 'rxjs/operators';
 
-import * as fromAuth from '../../auth/auth.reducer';
-import * as authActions from '../../auth/auth.actions';
-import * as authSelector from '../../auth/auth.selector';
+import * as fromAuth from 'src/app/auth/auth.reducer';
+import * as authActions from 'src/app/auth/auth.actions';
+import * as authSelector from 'src/app/auth/auth.selector';
 import * as instanceActions from 'src/app/metamodel/actions/instance.actions';
 import * as instanceSelector from 'src/app/metamodel/selectors/instance.selector';
-import { UserProfile } from '../../auth/user-profile.model';
-import { AppConfigService } from '../../app-config.service';
+import { UserProfile } from 'src/app/auth/user-profile.model';
+import { AppConfigService } from 'src/app/app-config.service';
 
 /**
  * @class
diff --git a/client/src/app/instance/shared-search/components/cone-search/cone-search.component.html b/client/src/app/instance/cone-search/components/cone-search.component.html
similarity index 100%
rename from client/src/app/instance/shared-search/components/cone-search/cone-search.component.html
rename to client/src/app/instance/cone-search/components/cone-search.component.html
diff --git a/client/src/app/instance/shared-search/components/cone-search/cone-search.component.spec.ts b/client/src/app/instance/cone-search/components/cone-search.component.spec.ts
similarity index 96%
rename from client/src/app/instance/shared-search/components/cone-search/cone-search.component.spec.ts
rename to client/src/app/instance/cone-search/components/cone-search.component.spec.ts
index 0e341c06d2e6f886ab72f4e2f22b3c11a2fb76a9..9fb1420b0313282dcb51fdb12c36920c2c053cad 100644
--- a/client/src/app/instance/shared-search/components/cone-search/cone-search.component.spec.ts
+++ b/client/src/app/instance/cone-search/components/cone-search.component.spec.ts
@@ -3,9 +3,9 @@ import { Component, Input, ViewChild } from '@angular/core';
 import { FormGroup, ReactiveFormsModule } from '@angular/forms';
 
 import { ConeSearchComponent } from './cone-search.component';
-import { ConeSearch, Resolver } from '../../../store/models';
+import { ConeSearch, Resolver } from 'src/app/instance/store/models';
 
-describe('[Instance][SharedSearch][Components][ConeSearch] ConeSearchComponent', () => {
+describe('[Instance][ConeSearch][Components] ConeSearchComponent', () => {
     @Component({
         selector: `app-host`,
         template: `
diff --git a/client/src/app/instance/shared-search/components/cone-search/cone-search.component.ts b/client/src/app/instance/cone-search/components/cone-search.component.ts
similarity index 97%
rename from client/src/app/instance/shared-search/components/cone-search/cone-search.component.ts
rename to client/src/app/instance/cone-search/components/cone-search.component.ts
index 4da6389e548d02d4da15fef263ca20aca8c8644f..b29786c30a36a6d6fb69ab5b121998b8bdbed114 100644
--- a/client/src/app/instance/shared-search/components/cone-search/cone-search.component.ts
+++ b/client/src/app/instance/cone-search/components/cone-search.component.ts
@@ -11,7 +11,7 @@ import { Component, Input, Output, EventEmitter, OnChanges, SimpleChanges } from
 import { FormGroup, FormControl, Validators } from '@angular/forms';
 
 import { ConeSearch, Resolver } from 'src/app/instance/store/models';
-import { nanValidator, rangeValidator } from '../../validators';
+import { nanValidator, rangeValidator } from '../validators';
 
 /**
  * @class
diff --git a/client/src/app/instance/shared-search/components/cone-search/dec.component.html b/client/src/app/instance/cone-search/components/dec.component.html
similarity index 100%
rename from client/src/app/instance/shared-search/components/cone-search/dec.component.html
rename to client/src/app/instance/cone-search/components/dec.component.html
diff --git a/client/src/app/instance/shared-search/components/cone-search/dec.component.spec.ts b/client/src/app/instance/cone-search/components/dec.component.spec.ts
similarity index 96%
rename from client/src/app/instance/shared-search/components/cone-search/dec.component.spec.ts
rename to client/src/app/instance/cone-search/components/dec.component.spec.ts
index 72005d143e79381b4183f87d4ba668e35707bad2..050800f011107998b7cdf079c216cce09fe6be30 100644
--- a/client/src/app/instance/shared-search/components/cone-search/dec.component.spec.ts
+++ b/client/src/app/instance/cone-search/components/dec.component.spec.ts
@@ -5,10 +5,10 @@ import { FormControl, FormGroup, ReactiveFormsModule, Validators } from '@angula
 import { of } from 'rxjs';
 
 import { DecComponent } from './dec.component';
-import { Resolver } from '../../../store/models';
-import { nanValidator, rangeValidator } from '../../validators';
+import { Resolver } from 'src/app/instance/store/models';
+import { nanValidator, rangeValidator } from '../validators';
 
-describe('[Instance][SharedSearch][Components][ConeSearch] DecComponent', () => {
+describe('[Instance][ConeSearch][Components] DecComponent', () => {
     let form = new FormGroup({
         dec: new FormControl('', [Validators.required, nanValidator, rangeValidator(-90, 90, 'DEC')]),
         dec_dms: new FormGroup({
diff --git a/client/src/app/instance/shared-search/components/cone-search/dec.component.ts b/client/src/app/instance/cone-search/components/dec.component.ts
similarity index 100%
rename from client/src/app/instance/shared-search/components/cone-search/dec.component.ts
rename to client/src/app/instance/cone-search/components/dec.component.ts
diff --git a/client/src/app/instance/shared-search/components/cone-search/index.ts b/client/src/app/instance/cone-search/components/index.ts
similarity index 100%
rename from client/src/app/instance/shared-search/components/cone-search/index.ts
rename to client/src/app/instance/cone-search/components/index.ts
diff --git a/client/src/app/instance/shared-search/components/cone-search/input-group.component.scss b/client/src/app/instance/cone-search/components/input-group.component.scss
similarity index 100%
rename from client/src/app/instance/shared-search/components/cone-search/input-group.component.scss
rename to client/src/app/instance/cone-search/components/input-group.component.scss
diff --git a/client/src/app/instance/shared-search/components/cone-search/ra.component.html b/client/src/app/instance/cone-search/components/ra.component.html
similarity index 100%
rename from client/src/app/instance/shared-search/components/cone-search/ra.component.html
rename to client/src/app/instance/cone-search/components/ra.component.html
diff --git a/client/src/app/instance/shared-search/components/cone-search/ra.component.spec.ts b/client/src/app/instance/cone-search/components/ra.component.spec.ts
similarity index 96%
rename from client/src/app/instance/shared-search/components/cone-search/ra.component.spec.ts
rename to client/src/app/instance/cone-search/components/ra.component.spec.ts
index bc5a055a3a207f2999cbe64b9cc8dd4890fdf377..3da2adf48a72de6de8ef2be1a9f411193c78b99a 100644
--- a/client/src/app/instance/shared-search/components/cone-search/ra.component.spec.ts
+++ b/client/src/app/instance/cone-search/components/ra.component.spec.ts
@@ -5,10 +5,10 @@ import { FormControl, FormGroup, ReactiveFormsModule, Validators } from '@angula
 import { of } from 'rxjs';
 
 import { RaComponent } from './ra.component';
-import { Resolver } from '../../../store/models';
-import { nanValidator, rangeValidator } from '../../validators';
+import { Resolver } from 'src/app/instance/store/models';
+import { nanValidator, rangeValidator } from '../validators';
 
-describe('[Instance][SharedSearch][Components][ConeSearch] RaComponent', () => {
+describe('[Instance][ConeSearch][Components] RaComponent', () => {
     let form = new FormGroup({
         ra: new FormControl('', [Validators.required, nanValidator, rangeValidator(0, 360, 'RA')]),
         ra_hms: new FormGroup({
diff --git a/client/src/app/instance/shared-search/components/cone-search/ra.component.ts b/client/src/app/instance/cone-search/components/ra.component.ts
similarity index 100%
rename from client/src/app/instance/shared-search/components/cone-search/ra.component.ts
rename to client/src/app/instance/cone-search/components/ra.component.ts
diff --git a/client/src/app/instance/shared-search/components/cone-search/radius.component.html b/client/src/app/instance/cone-search/components/radius.component.html
similarity index 100%
rename from client/src/app/instance/shared-search/components/cone-search/radius.component.html
rename to client/src/app/instance/cone-search/components/radius.component.html
diff --git a/client/src/app/instance/shared-search/components/cone-search/radius.component.scss b/client/src/app/instance/cone-search/components/radius.component.scss
similarity index 100%
rename from client/src/app/instance/shared-search/components/cone-search/radius.component.scss
rename to client/src/app/instance/cone-search/components/radius.component.scss
diff --git a/client/src/app/instance/shared-search/components/cone-search/radius.component.spec.ts b/client/src/app/instance/cone-search/components/radius.component.spec.ts
similarity index 88%
rename from client/src/app/instance/shared-search/components/cone-search/radius.component.spec.ts
rename to client/src/app/instance/cone-search/components/radius.component.spec.ts
index 1af9f99703a7aaa68f121e7d649efa23091f0f89..ad8441a4152094f9c68b884904d4707cef8b03d2 100644
--- a/client/src/app/instance/shared-search/components/cone-search/radius.component.spec.ts
+++ b/client/src/app/instance/cone-search/components/radius.component.spec.ts
@@ -3,7 +3,7 @@ import { ReactiveFormsModule } from '@angular/forms';
 
 import { RadiusComponent } from './radius.component';
 
-describe('[Instance][SharedSearch][Components][ConeSearch] RadiusComponent', () => {
+describe('[Instance][ConeSearch][Components] RadiusComponent', () => {
     let component: RadiusComponent;
     let fixture: ComponentFixture<RadiusComponent>;
 
diff --git a/client/src/app/instance/shared-search/components/cone-search/radius.component.ts b/client/src/app/instance/cone-search/components/radius.component.ts
similarity index 100%
rename from client/src/app/instance/shared-search/components/cone-search/radius.component.ts
rename to client/src/app/instance/cone-search/components/radius.component.ts
diff --git a/client/src/app/instance/shared-search/components/cone-search/resolver.component.html b/client/src/app/instance/cone-search/components/resolver.component.html
similarity index 100%
rename from client/src/app/instance/shared-search/components/cone-search/resolver.component.html
rename to client/src/app/instance/cone-search/components/resolver.component.html
diff --git a/client/src/app/instance/shared-search/components/cone-search/resolver.component.spec.ts b/client/src/app/instance/cone-search/components/resolver.component.spec.ts
similarity index 94%
rename from client/src/app/instance/shared-search/components/cone-search/resolver.component.spec.ts
rename to client/src/app/instance/cone-search/components/resolver.component.spec.ts
index 8c62843f2276d6d300e86f823e41d80a69458f60..9ca512b1c1e0d0ad7f179b859bb34d26d04e4d14 100644
--- a/client/src/app/instance/shared-search/components/cone-search/resolver.component.spec.ts
+++ b/client/src/app/instance/cone-search/components/resolver.component.spec.ts
@@ -3,9 +3,9 @@ import { Component, ViewChild } from '@angular/core';
 import { ReactiveFormsModule } from '@angular/forms';
 
 import { ResolverComponent } from './resolver.component';
-import { ConeSearch, Resolver } from '../../../store/models';
+import { ConeSearch, Resolver } from 'src/app/instance/store/models';
 
-describe('[Instance][SharedSearch][Components][ConeSearch] ResolverComponent', () => {
+describe('[Instance][ConeSearch][Components] ResolverComponent', () => {
     @Component({
         selector: `app-host`,
         template: `
diff --git a/client/src/app/instance/shared-search/components/cone-search/resolver.component.ts b/client/src/app/instance/cone-search/components/resolver.component.ts
similarity index 100%
rename from client/src/app/instance/shared-search/components/cone-search/resolver.component.ts
rename to client/src/app/instance/cone-search/components/resolver.component.ts
diff --git a/client/src/app/instance/shared-search/shared-search.module.ts b/client/src/app/instance/cone-search/cone-search.module.ts
similarity index 62%
rename from client/src/app/instance/shared-search/shared-search.module.ts
rename to client/src/app/instance/cone-search/cone-search.module.ts
index 061d35abcbd43e1eef08f518ced0d4f14ccc0f52..8e877e395725651a2bc3755287700b4148c9393f 100644
--- a/client/src/app/instance/shared-search/shared-search.module.ts
+++ b/client/src/app/instance/cone-search/cone-search.module.ts
@@ -11,24 +11,18 @@ import { NgModule } from '@angular/core';
 import { RouterModule } from '@angular/router';
 
 import { SharedModule } from 'src/app/shared/shared.module';
-import { DetailModule } from './detail/detail.module';
-import { sharedComponents } from './components';
-import { sharedPipes } from './pipes';
+import { coneSearchComponents } from './components';
 
 @NgModule({
     imports: [
         SharedModule,
-        DetailModule,
         RouterModule
     ],
     declarations: [
-        sharedComponents,
-        sharedPipes
+        coneSearchComponents
     ],
     exports: [
-        sharedComponents,
-        DetailModule,
-        sharedPipes
+        coneSearchComponents
     ]
 })
-export class SharedSearchModule { }
+export class ConeSearchModule { }
diff --git a/client/src/app/instance/shared-search/validators/index.ts b/client/src/app/instance/cone-search/validators/index.ts
similarity index 100%
rename from client/src/app/instance/shared-search/validators/index.ts
rename to client/src/app/instance/cone-search/validators/index.ts
diff --git a/client/src/app/instance/shared-search/validators/nan-validator.directive.spec.ts b/client/src/app/instance/cone-search/validators/nan-validator.directive.spec.ts
similarity index 88%
rename from client/src/app/instance/shared-search/validators/nan-validator.directive.spec.ts
rename to client/src/app/instance/cone-search/validators/nan-validator.directive.spec.ts
index 2fe0891a890f00b3752955d661433912e1fa8f45..c9fa107d077c09e31fa573457265e4fa15942e1f 100644
--- a/client/src/app/instance/shared-search/validators/nan-validator.directive.spec.ts
+++ b/client/src/app/instance/cone-search/validators/nan-validator.directive.spec.ts
@@ -2,7 +2,7 @@ import { FormControl } from '@angular/forms';
 
 import { nanValidator } from './nan-validator.directive';
 
-describe('[Instance][SharedSearch][Validators] nanValidator', () => {
+describe('[Instance][ConeSearch][Validators] nanValidator', () => {
     it('should return valid', () => {
         let field = new FormControl('');
         expect(nanValidator(field)).toBeNull();
diff --git a/client/src/app/instance/shared-search/validators/nan-validator.directive.ts b/client/src/app/instance/cone-search/validators/nan-validator.directive.ts
similarity index 91%
rename from client/src/app/instance/shared-search/validators/nan-validator.directive.ts
rename to client/src/app/instance/cone-search/validators/nan-validator.directive.ts
index eb5d9d728ee70dcee5bb90931e623197cf1224ca..0c0ff6a4f6516e987d36fe6fb68e8578eecc4391 100644
--- a/client/src/app/instance/shared-search/validators/nan-validator.directive.ts
+++ b/client/src/app/instance/cone-search/validators/nan-validator.directive.ts
@@ -24,7 +24,7 @@ export function nanValidator(control: FormControl): {[key: string]: any} | null
         return null;
     }
     if (isNaN(value) || !isFloat) {
-        return { 'nan': { value: control.value + ' is not a number' } };
+        return { 'nan': { value: `${control.value} is not a number` } };
     }
     return null;
 }
diff --git a/client/src/app/instance/shared-search/validators/range-validator.directive.spec.ts b/client/src/app/instance/cone-search/validators/range-validator.directive.spec.ts
similarity index 91%
rename from client/src/app/instance/shared-search/validators/range-validator.directive.spec.ts
rename to client/src/app/instance/cone-search/validators/range-validator.directive.spec.ts
index 5a981c99dcbdf678df7b0ba670337e31511b9a7b..b5026ebea129fe9697c6dc55c74cfdac51e056c2 100644
--- a/client/src/app/instance/shared-search/validators/range-validator.directive.spec.ts
+++ b/client/src/app/instance/cone-search/validators/range-validator.directive.spec.ts
@@ -2,7 +2,7 @@ import { FormControl } from '@angular/forms';
 
 import { rangeValidator } from './range-validator.directive';
 
-describe('[Instance][SharedSearch][Validators] rangeValidator', () => {
+describe('[Instance][ConeSearch][Validators] rangeValidator', () => {
     it('should return valid', () => {
         let field = new FormControl('', rangeValidator(0, 10));
         field.setValue(7);
diff --git a/client/src/app/instance/shared-search/validators/range-validator.directive.ts b/client/src/app/instance/cone-search/validators/range-validator.directive.ts
similarity index 82%
rename from client/src/app/instance/shared-search/validators/range-validator.directive.ts
rename to client/src/app/instance/cone-search/validators/range-validator.directive.ts
index fa4ef419fb832c1ffad2108a2a601353f0b56b3f..ef9e8ce2725d5c69e15e2d41feda87d1704b2290 100644
--- a/client/src/app/instance/shared-search/validators/range-validator.directive.ts
+++ b/client/src/app/instance/cone-search/validators/range-validator.directive.ts
@@ -23,9 +23,9 @@ export function rangeValidator(min: number, max: number, formLabel?: string): Va
         const value = parseFloat(control.value);
         if (value < min || value > max) {
             if (formLabel) {
-                return { 'range': { value: formLabel + ' must be between ' + min + ' and ' + max } };
+                return { 'range': { value: `${formLabel} must be between ${min} and ${max}` } };
             }
-            return { 'range': { value: 'Must be between ' + min + ' and ' + max } };
+            return { 'range': { value: `Must be between ${min} and ${max}` } };
         }
         return null;
     }
diff --git a/client/src/app/instance/documentation/containers/documentation.component.ts b/client/src/app/instance/documentation/containers/documentation.component.ts
index ee249c1aa6d6b2e77cf3a3b284405b590c920aea..2500d92969939bacf0ad29c325655a90fbe32eef 100644
--- a/client/src/app/instance/documentation/containers/documentation.component.ts
+++ b/client/src/app/instance/documentation/containers/documentation.component.ts
@@ -12,12 +12,12 @@ import { Component, OnInit } from '@angular/core';
 import { Store } from '@ngrx/store';
 import { Observable } from 'rxjs';
 
-import * as attributeActions from 'src/app/metamodel/actions/attribute.actions';
-import * as datasetSelector from 'src/app/metamodel/selectors/dataset.selector';
 import { AppConfigService } from 'src/app/app-config.service';
 import { Attribute } from 'src/app/metamodel/models';
-import * as instanceSelector from '../../../metamodel/selectors/instance.selector';
-import * as attributeSelector from '../../../metamodel/selectors/attribute.selector';
+import * as attributeActions from 'src/app/metamodel/actions/attribute.actions';
+import * as datasetSelector from 'src/app/metamodel/selectors/dataset.selector';
+import * as instanceSelector from 'src/app/metamodel/selectors/instance.selector';
+import * as attributeSelector from 'src/app/metamodel/selectors/attribute.selector';
 
 /**
  * @class
@@ -57,7 +57,7 @@ export class DocumentationComponent implements OnInit {
     getUrlServer(): string {
         if (!this.config.apiUrl.startsWith('http')) {
             const url = window.location;
-            return url.protocol + '//' + url.host + this.config.apiUrl;
+            return `${url.protocol}//${url.host}${this.config.apiUrl}`;
         }
         return this.config.apiUrl;
     }
diff --git a/client/src/app/instance/search-multiple/search-multiple.module.ts b/client/src/app/instance/search-multiple/search-multiple.module.ts
index f309487d7a04e1e064c428c6a1303379f093d57d..fb571918658a6964da4044754d30fff003230838 100644
--- a/client/src/app/instance/search-multiple/search-multiple.module.ts
+++ b/client/src/app/instance/search-multiple/search-multiple.module.ts
@@ -10,14 +10,14 @@
 import { NgModule } from '@angular/core';
 
 import { SharedModule } from 'src/app/shared/shared.module';
-import { SharedSearchModule } from '../shared-search/shared-search.module';
+import { ConeSearchModule } from '../cone-search/cone-search.module';
 import { SearchMultipleRoutingModule, routedComponents } from './search-multiple-routing.module';
 import { dummiesComponents } from './components';
 
 @NgModule({
     imports: [
         SharedModule,
-        SharedSearchModule,
+        ConeSearchModule,
         SearchMultipleRoutingModule
     ],
     declarations: [
diff --git a/client/src/app/instance/search/components/criteria/search-type/between-date.component.ts b/client/src/app/instance/search/components/criteria/search-type/between-date.component.ts
index 68f1dc171dd1b84759b9ab0ee555332b0ca2a005..d7ece8ca5f778f16773d722d41ccd09b92b0f935 100644
--- a/client/src/app/instance/search/components/criteria/search-type/between-date.component.ts
+++ b/client/src/app/instance/search/components/criteria/search-type/between-date.component.ts
@@ -78,6 +78,6 @@ export class BetweenDateComponent implements OnChanges {
     getDateString(date: Date): string {
         const month = ('0' + (date.getMonth() + 1)).slice(-2);
         const day = ('0' + (date.getDate())).slice(-2);
-        return date.getFullYear() + '-' + month + '-' + day;
+        return `${date.getFullYear()}-${month}-${day}`;
     }
 }
diff --git a/client/src/app/instance/search/components/criteria/search-type/datalist.component.ts b/client/src/app/instance/search/components/criteria/search-type/datalist.component.ts
index dc1e1c6ac5461c41595805d21703673f8793d0bc..03f9164479774d637654b862b38273df48780e27 100644
--- a/client/src/app/instance/search/components/criteria/search-type/datalist.component.ts
+++ b/client/src/app/instance/search/components/criteria/search-type/datalist.component.ts
@@ -90,6 +90,6 @@ export class DatalistComponent implements OnChanges {
      * @return string
      */
     getDatalistId(): string {
-        return 'datalist_' + this.id;
+        return `datalist_${this.id}`;
     }
 }
diff --git a/client/src/app/instance/search/components/criteria/search-type/date.component.ts b/client/src/app/instance/search/components/criteria/search-type/date.component.ts
index cef1a631e6a6ee8c80702cd783de626a79ac9efb..43344f5da41cccd9f3d0c406445756085d78421a 100644
--- a/client/src/app/instance/search/components/criteria/search-type/date.component.ts
+++ b/client/src/app/instance/search/components/criteria/search-type/date.component.ts
@@ -95,6 +95,6 @@ export class DateComponent implements OnChanges {
     getDateString(date: Date): string {
         const month = ('0' + (date.getMonth() + 1)).slice(-2);
         const day = ('0' + (date.getDate())).slice(-2);
-        return date.getFullYear() + '-' + month + '-' + day;
+        return `${date.getFullYear()}-${month}-${day}`;
     }
 }
diff --git a/client/src/app/instance/search/components/criteria/search-type/datetime.component.ts b/client/src/app/instance/search/components/criteria/search-type/datetime.component.ts
index 3f60b69ff85b040e295db91a9993d0dd2fe48034..f1c9506878f024d87aa3bcf38d2f4e6d56b112fa 100644
--- a/client/src/app/instance/search/components/criteria/search-type/datetime.component.ts
+++ b/client/src/app/instance/search/components/criteria/search-type/datetime.component.ts
@@ -76,8 +76,8 @@ export class DatetimeComponent implements OnChanges {
      */
     emitAdd(): void {
         const date = this.getDateString(this.form.value.date);
-        const time = this.form.value.hh + ':' + this.form.value.mm;
-        const fd = {id: this.id, type: 'field', operator: this.operator, value: date + ' ' + time};
+        const time = `${this.form.value.hh}:${this.form.value.mm}`;
+        const fd = {id: this.id, type: 'field', operator: this.operator, value: `${date} ${time}`};
         this.addCriterion.emit(fd);
     }
 
@@ -107,6 +107,6 @@ export class DatetimeComponent implements OnChanges {
     getDateString(date: Date): string {
         const month = ('0' + (date.getMonth() + 1)).slice(-2);
         const day = ('0' + (date.getDate())).slice(-2);
-        return date.getFullYear() + '-' + month + '-' + day;
+        return `${date.getFullYear()}-${month}-${day}`;
     }
 }
diff --git a/client/src/app/instance/search/components/criteria/search-type/time.component.ts b/client/src/app/instance/search/components/criteria/search-type/time.component.ts
index 8c4a4e59675063866f499f8cfe963644fb2f7175..30b78425b61dffb42e6fcf2c90e3efa880ae296b 100644
--- a/client/src/app/instance/search/components/criteria/search-type/time.component.ts
+++ b/client/src/app/instance/search/components/criteria/search-type/time.component.ts
@@ -73,7 +73,7 @@ export class TimeComponent implements OnChanges {
      * @fires EventEmitter<FieldCriterion>
      */
     emitAdd(): void {
-        const time = {id: this.id, type: 'field', operator: this.operator, value: this.form.value.hh + ':' + this.form.value.mm};
+        const time = {id: this.id, type: 'field', operator: this.operator, value: `${this.form.value.hh}:${this.form.value.mm}`};
         this.addCriterion.emit(time);
     }
 
diff --git a/client/src/app/instance/shared-search/detail/components/default/default-object.component.html b/client/src/app/instance/search/components/detail/default/default-object.component.html
similarity index 100%
rename from client/src/app/instance/shared-search/detail/components/default/default-object.component.html
rename to client/src/app/instance/search/components/detail/default/default-object.component.html
diff --git a/client/src/app/instance/shared-search/detail/components/default/default-object.component.spec.ts b/client/src/app/instance/search/components/detail/default/default-object.component.spec.ts
similarity index 85%
rename from client/src/app/instance/shared-search/detail/components/default/default-object.component.spec.ts
rename to client/src/app/instance/search/components/detail/default/default-object.component.spec.ts
index e665ccd84f782f170dc0c7a5ad6e3dc5016474cd..24698efed39c3aa1726a35003d06811c4100fe2f 100644
--- a/client/src/app/instance/shared-search/detail/components/default/default-object.component.spec.ts
+++ b/client/src/app/instance/search/components/detail/default/default-object.component.spec.ts
@@ -2,9 +2,9 @@ import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing';
 import { Component, Input } from '@angular/core';
 
 import { DefaultObjectComponent } from './default-object.component';
-import { Attribute, OutputCategory, OutputFamily } from '../../../../../metamodel/models';
+import { Attribute, OutputCategory, OutputFamily } from 'src/app/metamodel/models';
 
-describe('[Instance][SharedSearch][Detail][Component][Default] DefaultObjectComponent', () => {
+describe('[Instance][Search][Component][Detail][Default] DefaultObjectComponent', () => {
     @Component({ selector: 'app-object-data', template: '' })
     class ObjectDataStubComponent {
         @Input() datasetSelected: string;
diff --git a/client/src/app/instance/shared-search/detail/components/default/default-object.component.ts b/client/src/app/instance/search/components/detail/default/default-object.component.ts
similarity index 100%
rename from client/src/app/instance/shared-search/detail/components/default/default-object.component.ts
rename to client/src/app/instance/search/components/detail/default/default-object.component.ts
diff --git a/client/src/app/instance/shared-search/detail/components/default/index.ts b/client/src/app/instance/search/components/detail/default/index.ts
similarity index 100%
rename from client/src/app/instance/shared-search/detail/components/default/index.ts
rename to client/src/app/instance/search/components/detail/default/index.ts
diff --git a/client/src/app/instance/shared-search/detail/components/index.ts b/client/src/app/instance/search/components/detail/index.ts
similarity index 86%
rename from client/src/app/instance/shared-search/detail/components/index.ts
rename to client/src/app/instance/search/components/detail/index.ts
index e0d32c36208a417c4ec089814d619e25f5a69c6b..6b537aa927f9c158cc0dc2686990333b73d915ec 100644
--- a/client/src/app/instance/shared-search/detail/components/index.ts
+++ b/client/src/app/instance/search/components/detail/index.ts
@@ -2,7 +2,7 @@ import { defaultComponents } from './default';
 import { spectraComponents } from './spectra';
 import { ObjectDataComponent } from './object-data.component';
 
-export const dummiesComponents = [
+export const detailsComponents = [
     defaultComponents,
     spectraComponents,
     ObjectDataComponent
diff --git a/client/src/app/instance/shared-search/detail/components/object-data.component.html b/client/src/app/instance/search/components/detail/object-data.component.html
similarity index 100%
rename from client/src/app/instance/shared-search/detail/components/object-data.component.html
rename to client/src/app/instance/search/components/detail/object-data.component.html
diff --git a/client/src/app/instance/shared-search/detail/components/object-data.component.spec.ts b/client/src/app/instance/search/components/detail/object-data.component.spec.ts
similarity index 96%
rename from client/src/app/instance/shared-search/detail/components/object-data.component.spec.ts
rename to client/src/app/instance/search/components/detail/object-data.component.spec.ts
index 852eb96d84c77a84cd18ebff842467ae61592bfa..aff1478a58c7695e1e410296ddec23402e125aa7 100644
--- a/client/src/app/instance/shared-search/detail/components/object-data.component.spec.ts
+++ b/client/src/app/instance/search/components/detail/object-data.component.spec.ts
@@ -6,7 +6,7 @@ import { ObjectDataComponent } from './object-data.component';
 import { AppConfigService } from '../../../../app-config.service';
 import { ATTRIBUTE_LIST, CATEGORY_LIST } from '../../../../../test-data';
 
-describe('[Instance][SharedSearch][Detail][Component] ObjectDataComponent', () => {
+describe('[Instance][Search][Component][Detail] ObjectDataComponent', () => {
     let component: ObjectDataComponent;
     let fixture: ComponentFixture<ObjectDataComponent>;
     let appConfigServiceStub = new AppConfigService();
diff --git a/client/src/app/instance/shared-search/detail/components/object-data.component.ts b/client/src/app/instance/search/components/detail/object-data.component.ts
similarity index 95%
rename from client/src/app/instance/shared-search/detail/components/object-data.component.ts
rename to client/src/app/instance/search/components/detail/object-data.component.ts
index 14204ee175e467103e964462e0ea379e73a05f55..e4453a755701d7db4051a20ff23bcb38f6ca28e4 100644
--- a/client/src/app/instance/shared-search/detail/components/object-data.component.ts
+++ b/client/src/app/instance/search/components/detail/object-data.component.ts
@@ -84,6 +84,6 @@ export class ObjectDataComponent {
      * @return string
      */
     getDownloadHref(attributeLabel: string): string {
-        return getHost(this.appConfig.apiUrl) + '/download-file/' + this.datasetSelected + '/' + attributeLabel;
+        return `${getHost(this.appConfig.apiUrl)}/download-file/${this.datasetSelected}/${attributeLabel}`;
     }
 }
diff --git a/client/src/app/instance/shared-search/detail/components/spectra/graph/point.ts b/client/src/app/instance/search/components/detail/spectra/graph/point.ts
similarity index 100%
rename from client/src/app/instance/shared-search/detail/components/spectra/graph/point.ts
rename to client/src/app/instance/search/components/detail/spectra/graph/point.ts
diff --git a/client/src/app/instance/shared-search/detail/components/spectra/graph/rays.ts b/client/src/app/instance/search/components/detail/spectra/graph/rays.ts
similarity index 100%
rename from client/src/app/instance/shared-search/detail/components/spectra/graph/rays.ts
rename to client/src/app/instance/search/components/detail/spectra/graph/rays.ts
diff --git a/client/src/app/instance/shared-search/detail/components/spectra/graph/spectra-graph.component.html b/client/src/app/instance/search/components/detail/spectra/graph/spectra-graph.component.html
similarity index 100%
rename from client/src/app/instance/shared-search/detail/components/spectra/graph/spectra-graph.component.html
rename to client/src/app/instance/search/components/detail/spectra/graph/spectra-graph.component.html
diff --git a/client/src/app/instance/shared-search/detail/components/spectra/graph/spectra-graph.component.scss b/client/src/app/instance/search/components/detail/spectra/graph/spectra-graph.component.scss
similarity index 100%
rename from client/src/app/instance/shared-search/detail/components/spectra/graph/spectra-graph.component.scss
rename to client/src/app/instance/search/components/detail/spectra/graph/spectra-graph.component.scss
diff --git a/client/src/app/instance/shared-search/detail/components/spectra/graph/spectra-graph.component.ts b/client/src/app/instance/search/components/detail/spectra/graph/spectra-graph.component.ts
similarity index 92%
rename from client/src/app/instance/shared-search/detail/components/spectra/graph/spectra-graph.component.ts
rename to client/src/app/instance/search/components/detail/spectra/graph/spectra-graph.component.ts
index c4be29c7a18d65b933ad6285702f7d809a642adb..cf96d7c9c1ffbd4554bc811656058823708ed51a 100644
--- a/client/src/app/instance/shared-search/detail/components/spectra/graph/spectra-graph.component.ts
+++ b/client/src/app/instance/search/components/detail/spectra/graph/spectra-graph.component.ts
@@ -81,7 +81,7 @@ export class SpectraGraphComponent implements OnInit {
 
         this.focus = this.svg.append("g")
             .attr("class", "focus")
-            .attr("transform", "translate(" + this.margin.left + "," + this.margin.top + ")");
+            .attr("transform", `translate(${this.margin.left},${this.margin.top})`);
     }
 
     private addTitles(): void {
@@ -98,7 +98,7 @@ export class SpectraGraphComponent implements OnInit {
             .attr("x", (this.margin.left * 0.75) * -1)
             .attr("y", this.height / 2)
             .attr("text-anchor", "middle")
-            .attr("transform", "rotate(-90," + ((this.margin.left * 0.75) * -1) + "," + this.height / 2 + ")")
+            .attr("transform", `rotate(-90,${((this.margin.left * 0.75) * -1)},${this.height / 2})`)
             .text("Flux Fλ (erg/sec/cm2/Å)");
     }
 
@@ -191,7 +191,7 @@ export class SpectraGraphComponent implements OnInit {
             .append("text")
             .attr("x", r => this.x(r.wavelength * coef) - 5)
             .attr("y", this.height * 0.2)
-            .attr("transform", r => "rotate(-90, " + (this.x(r.wavelength * coef) - 5) + "," + this.height * 0.2 + ")")
+            .attr("transform", r => `rotate(-90,${(this.x(r.wavelength * coef) - 5)},${this.height * 0.2})`)
             .text(r => r.name);
 
         const ar = this.focus.append("g")
@@ -214,7 +214,7 @@ export class SpectraGraphComponent implements OnInit {
             .append("text")
             .attr("x", r => this.x(r.wavelength * coef) - 5)
             .attr("y", this.height * 0.8)
-            .attr("transform", r => "rotate(-90, " + (this.x(r.wavelength * coef) - 5) + "," + this.height * 0.8 + ")")
+            .attr("transform", r => `rotate(-90,${(this.x(r.wavelength * coef) - 5)},${this.height * 0.8})`)
             .text(r => r.name);
     }
 
@@ -222,7 +222,7 @@ export class SpectraGraphComponent implements OnInit {
         this.xAxis = d3.axisBottom(this.x);
         this.focus.append("g")
             .attr("class", "axis axis-x")
-            .attr("transform", "translate(0," + this.height + ")")
+            .attr("transform", `translate(0,${this.height})`)
             .call(this.xAxis);
 
         this.focus.append("g")
@@ -233,7 +233,7 @@ export class SpectraGraphComponent implements OnInit {
     private addRaysButtons(): void {
         const gButtons = this.svg.append("g")
             .attr("class", "rays-buttons")
-            .attr("transform", "translate(" + this.margin.left + "," + 25 + ")");
+            .attr("transform", `translate(${this.margin.left},25)`);
 
         const emission = gButtons.append("g")
             .attr("class", "emission-button emission-button-on");
@@ -338,7 +338,7 @@ export class SpectraGraphComponent implements OnInit {
                 const x0 = x.invert(mouse[0]);
                 const index = bisectX(dataset, x0);
                 const datum = dataset[index];
-                tooltip.attr("transform", "translate(" + x(datum.x) + "," + y(datum.y) + ")");
+                tooltip.attr("transform", `translate(${x(datum.x)},${y(datum.y)})`);
                 xValue.text(datum.x);
                 yValue.text(datum.y);
             });
@@ -347,7 +347,7 @@ export class SpectraGraphComponent implements OnInit {
     private addBrush(dataset: d3.DSVParsedArray<Point>): void {
         const context = this.svg.append("g")
             .attr("class", "context")
-            .attr("transform", "translate(" + this.margin.left + "," + 480 + ")");
+            .attr("transform", `translate(${this.margin.left},480)`);
 
         const xBrush = d3.scaleLinear().range([0, this.width]);
         const yBrush = d3.scaleLinear().range([this.brushHeight, 0]);
@@ -379,7 +379,7 @@ export class SpectraGraphComponent implements OnInit {
 
         context.append("g")
             .attr("class", "axis")
-            .attr("transform", "translate(0," + this.brushHeight + ")")
+            .attr("transform", `translate(0,${this.brushHeight})`)
             .call(xBrushAxis);
 
         const brush = d3.brushX()
@@ -422,7 +422,7 @@ export class SpectraGraphComponent implements OnInit {
                     .selectAll("text")
                     .data(emissionLines)
                     .attr("x", r => this.x(r.wavelength * coef) - 5)
-                    .attr("transform", r => "rotate(-90, " + (this.x(r.wavelength * coef) - 5) + "," + this.height * 0.2 + ")")
+                    .attr("transform", r => `rotate(-90,${(this.x(r.wavelength * coef) - 5)},${this.height * 0.2})`);
 
                 this.focus.select(".absorption")
                     .selectAll("line")
@@ -433,7 +433,7 @@ export class SpectraGraphComponent implements OnInit {
                     .selectAll("text")
                     .data(absorptionLines)
                     .attr("x", r => this.x(r.wavelength * coef) - 5)
-                    .attr("transform", r => "rotate(-90, " + (this.x(r.wavelength * coef) - 5) + "," + this.height * 0.8 + ")")
+                    .attr("transform", r => `rotate(-90,${(this.x(r.wavelength * coef) - 5)},${this.height * 0.8})`);
             });
 
         context.append("g")
diff --git a/client/src/app/instance/shared-search/detail/components/spectra/graph/spectra-type.ts b/client/src/app/instance/search/components/detail/spectra/graph/spectra-type.ts
similarity index 100%
rename from client/src/app/instance/shared-search/detail/components/spectra/graph/spectra-type.ts
rename to client/src/app/instance/search/components/detail/spectra/graph/spectra-type.ts
diff --git a/client/src/app/instance/shared-search/detail/components/spectra/index.ts b/client/src/app/instance/search/components/detail/spectra/index.ts
similarity index 100%
rename from client/src/app/instance/shared-search/detail/components/spectra/index.ts
rename to client/src/app/instance/search/components/detail/spectra/index.ts
diff --git a/client/src/app/instance/shared-search/detail/components/spectra/spectra-object.component.html b/client/src/app/instance/search/components/detail/spectra/spectra-object.component.html
similarity index 100%
rename from client/src/app/instance/shared-search/detail/components/spectra/spectra-object.component.html
rename to client/src/app/instance/search/components/detail/spectra/spectra-object.component.html
diff --git a/client/src/app/instance/shared-search/detail/components/spectra/spectra-object.component.scss b/client/src/app/instance/search/components/detail/spectra/spectra-object.component.scss
similarity index 100%
rename from client/src/app/instance/shared-search/detail/components/spectra/spectra-object.component.scss
rename to client/src/app/instance/search/components/detail/spectra/spectra-object.component.scss
diff --git a/client/src/app/instance/shared-search/detail/components/spectra/spectra-object.component.spec.ts b/client/src/app/instance/search/components/detail/spectra/spectra-object.component.spec.ts
similarity index 90%
rename from client/src/app/instance/shared-search/detail/components/spectra/spectra-object.component.spec.ts
rename to client/src/app/instance/search/components/detail/spectra/spectra-object.component.spec.ts
index 293a54983c1f475cf569f6dd3435e3c8bde4a2b6..30c1f4d39e045840b5cc738818470a9c561ee0c3 100644
--- a/client/src/app/instance/shared-search/detail/components/spectra/spectra-object.component.spec.ts
+++ b/client/src/app/instance/search/components/detail/spectra/spectra-object.component.spec.ts
@@ -2,11 +2,11 @@ import { ComponentFixture, TestBed } from '@angular/core/testing';
 import { Component, Input } from '@angular/core';
 
 import { SpectraObjectComponent } from './spectra-object.component';
-import { Attribute, OutputCategory, OutputFamily } from '../../../../../metamodel/models';
-import { AppConfigService } from '../../../../../app-config.service';
-import { ATTRIBUTE_LIST, OBJECT_DETAIL } from '../../../../../../test-data';
+import { Attribute, OutputCategory, OutputFamily } from 'src/app/metamodel/models';
+import { AppConfigService } from 'src/app/app-config.service';
+import { ATTRIBUTE_LIST, OBJECT_DETAIL } from 'src/test-data';
 
-describe('[Instance][SharedSearch][Detail][Component][Spectra] SpectraObjectComponent', () => {
+describe('[Instance][Search][Component][Detail][Spectra] SpectraObjectComponent', () => {
     @Component({ selector: 'app-spectra-graph', template: '' })
     class SpectraGraphStubComponent {
         @Input() z: number;
diff --git a/client/src/app/instance/shared-search/detail/components/spectra/spectra-object.component.ts b/client/src/app/instance/search/components/detail/spectra/spectra-object.component.ts
similarity index 95%
rename from client/src/app/instance/shared-search/detail/components/spectra/spectra-object.component.ts
rename to client/src/app/instance/search/components/detail/spectra/spectra-object.component.ts
index 908822e2e17536f298136d55f378c9df18f47a09..e3f1f4006c4df3fbe31a71f307b2fc57e92725d7 100644
--- a/client/src/app/instance/shared-search/detail/components/spectra/spectra-object.component.ts
+++ b/client/src/app/instance/search/components/detail/spectra/spectra-object.component.ts
@@ -54,7 +54,7 @@ export class SpectraObjectComponent implements OnInit {
         const spectraAttribute: Attribute = this.attributeList
             .filter(a => a.detail)
             .find(attribute => attribute.search_flag === 'SPECTRUM_1D');
-        return getHost(this.appConfig.apiUrl) + '/download-file/' + this.datasetSelected + '/' + this.object[spectraAttribute.label];
+        return `${getHost(this.appConfig.apiUrl)}/download-file/${this.datasetSelected}/${this.object[spectraAttribute.label]}`;
     }
 
     /**
diff --git a/client/src/app/instance/search/components/index.ts b/client/src/app/instance/search/components/index.ts
index a0537c999b5e9b20bd10bb79ee6626c2a8ead89a..f57be4d2034cf2175c843a934d31ba264f9aa91d 100644
--- a/client/src/app/instance/search/components/index.ts
+++ b/client/src/app/instance/search/components/index.ts
@@ -4,6 +4,7 @@ import { datasetComponents } from './dataset';
 import { criteriaComponents } from './criteria';
 import { outputComponents } from './output';
 import { resultComponents } from './result';
+import { detailsComponents } from './detail';
 
 export const dummiesComponents = [
     ProgressBarComponent,
@@ -11,5 +12,6 @@ export const dummiesComponents = [
     datasetComponents,
     criteriaComponents,
     outputComponents,
-    resultComponents
+    resultComponents,
+    detailsComponents
 ];
\ No newline at end of file
diff --git a/client/src/app/instance/shared-search/components/datatable/datatable.component.html b/client/src/app/instance/search/components/result/datatable.component.html
similarity index 100%
rename from client/src/app/instance/shared-search/components/datatable/datatable.component.html
rename to client/src/app/instance/search/components/result/datatable.component.html
diff --git a/client/src/app/instance/shared-search/components/datatable/datatable.component.scss b/client/src/app/instance/search/components/result/datatable.component.scss
similarity index 100%
rename from client/src/app/instance/shared-search/components/datatable/datatable.component.scss
rename to client/src/app/instance/search/components/result/datatable.component.scss
diff --git a/client/src/app/instance/shared-search/components/datatable/datatable.component.spec.ts b/client/src/app/instance/search/components/result/datatable.component.spec.ts
similarity index 99%
rename from client/src/app/instance/shared-search/components/datatable/datatable.component.spec.ts
rename to client/src/app/instance/search/components/result/datatable.component.spec.ts
index c842578386a6c03ead18107b0894450793677341..327261cc82eff0111abaf9a9642d9b882fceffcc 100644
--- a/client/src/app/instance/shared-search/components/datatable/datatable.component.spec.ts
+++ b/client/src/app/instance/search/components/result/datatable.component.spec.ts
@@ -14,7 +14,7 @@ import {
 import { ATTRIBUTE_LIST, DATASET } from '../../../../../test-data';
 import { Attribute } from '../../../../metamodel/models';
 
-describe('[Instance][SharedSearch][Components][Datatable] DatatableComponent', () => {
+describe('[Instance][Search][Component][Result] DatatableComponent', () => {
     @Component({ selector: 'app-spinner', template: '' })
     class SpinnerStubComponent { }
 
diff --git a/client/src/app/instance/shared-search/components/datatable/datatable.component.ts b/client/src/app/instance/search/components/result/datatable.component.ts
similarity index 100%
rename from client/src/app/instance/shared-search/components/datatable/datatable.component.ts
rename to client/src/app/instance/search/components/result/datatable.component.ts
diff --git a/client/src/app/instance/search/components/result/download.component.ts b/client/src/app/instance/search/components/result/download.component.ts
index ddb9cdcc360745a246d838a2d54ea64446f83210..f7ca76a176db606ccccea47bf798de3dfc1599ea 100644
--- a/client/src/app/instance/search/components/result/download.component.ts
+++ b/client/src/app/instance/search/components/result/download.component.ts
@@ -12,7 +12,7 @@ import { HttpClient } from '@angular/common/http';
 
 import { Criterion, ConeSearch, criterionToString } from '../../../store/models';
 import { Dataset } from 'src/app/metamodel/models';
-import { getHost as host } from 'src/app/shared/utils';
+import { getHost } from 'src/app/shared/utils';
 import { AppConfigService } from 'src/app/app-config.service';
 
 /**
@@ -75,14 +75,14 @@ export class DownloadComponent {
      * @return string
      */
     getUrl(format: string): string {
-        let query: string = host(this.appConfig.apiUrl) + '/search/' + this.datasetSelected + '?a=' + this.outputList.join(';');
+        let query: string = `${getHost(this.appConfig.apiUrl)}/search/${this.datasetSelected}?a=${this.outputList.join(';')}`;
         if (this.criteriaList.length > 0) {
-            query += '&c=' + this.criteriaList.map(criterion => criterionToString(criterion)).join(';');
+            query += `&c=${this.criteriaList.map(criterion => criterionToString(criterion)).join(';')}`;
         }
         if (this.coneSearch) {
-            query += '&cs=' + this.coneSearch.ra + ':' + this.coneSearch.dec + ':' + this.coneSearch.radius;
+            query += `&cs=${this.coneSearch.ra}:${this.coneSearch.dec}:${this.coneSearch.radius}`;
         }
-        query += '&f=' + format
+        query += `&f=${format}`;
         return query;
     }
 
@@ -92,12 +92,12 @@ export class DownloadComponent {
      * @return boolean
      */
     getUrlArchive(): string {
-        let query: string = host(this.appConfig.apiUrl) + '/archive/' + this.datasetSelected + '?a=' + this.outputList.join(';');
+        let query: string = `${getHost(this.appConfig.apiUrl)}/archive/${this.datasetSelected}?a=${this.outputList.join(';')}`;
         if (this.criteriaList.length > 0) {
-            query += '&c=' + this.criteriaList.map(criterion => criterionToString(criterion)).join(';');
+            query += `&c=${this.criteriaList.map(criterion => criterionToString(criterion)).join(';')}`;
         }
         if (this.coneSearch) {
-            query += '&cs=' + this.coneSearch.ra + ':' + this.coneSearch.dec + ':' + this.coneSearch.radius;
+            query += `&cs=${this.coneSearch.ra}:${this.coneSearch.dec}:${this.coneSearch.radius}`;
         }
         return query;
     }
diff --git a/client/src/app/instance/search/components/result/index.ts b/client/src/app/instance/search/components/result/index.ts
index f710426a95579957903094bd0ac64f1402585f5c..f8e4657e1f14cc050b279326e6434fd79d50a862 100644
--- a/client/src/app/instance/search/components/result/index.ts
+++ b/client/src/app/instance/search/components/result/index.ts
@@ -3,11 +3,15 @@ import { DownloadComponent } from './download.component';
 import { ReminderComponent } from './reminder.component';
 import { SampComponent } from './samp.component';
 import { UrlDisplayComponent } from './url-display.component';
+import { DatatableComponent } from './datatable.component';
+import { rendererComponents } from './renderer';
 
 export const resultComponents = [
     DatatableTabComponent,
     DownloadComponent,
     ReminderComponent,
     SampComponent,
-    UrlDisplayComponent
+    UrlDisplayComponent,
+    DatatableComponent,
+    rendererComponents
 ];
diff --git a/client/src/app/instance/shared-search/components/datatable/renderer/detail-renderer.component.html b/client/src/app/instance/search/components/result/renderer/detail-renderer.component.html
similarity index 100%
rename from client/src/app/instance/shared-search/components/datatable/renderer/detail-renderer.component.html
rename to client/src/app/instance/search/components/result/renderer/detail-renderer.component.html
diff --git a/client/src/app/instance/shared-search/components/datatable/renderer/detail-renderer.component.spec.ts b/client/src/app/instance/search/components/result/renderer/detail-renderer.component.spec.ts
similarity index 87%
rename from client/src/app/instance/shared-search/components/datatable/renderer/detail-renderer.component.spec.ts
rename to client/src/app/instance/search/components/result/renderer/detail-renderer.component.spec.ts
index 4c6ff87e12ad8a0b8111af6aa113e87f2c8ee00f..2087f1fcb761712899ba8666dc680e5213a2fcf7 100644
--- a/client/src/app/instance/shared-search/components/datatable/renderer/detail-renderer.component.spec.ts
+++ b/client/src/app/instance/search/components/result/renderer/detail-renderer.component.spec.ts
@@ -3,7 +3,7 @@ import { ComponentFixture, TestBed } from '@angular/core/testing';
 import { DetailRendererComponent } from './detail-renderer.component';
 import { RouterTestingModule } from '@angular/router/testing';
 
-describe('[Instance][SharedSearch][Components][Datatable][Renderer] DetailRendererComponent', () => {
+describe('[Instance][Search][Component][Result][Renderer] DetailRendererComponent', () => {
     let component: DetailRendererComponent;
     let fixture: ComponentFixture<DetailRendererComponent>;
 
diff --git a/client/src/app/instance/shared-search/components/datatable/renderer/detail-renderer.component.ts b/client/src/app/instance/search/components/result/renderer/detail-renderer.component.ts
similarity index 100%
rename from client/src/app/instance/shared-search/components/datatable/renderer/detail-renderer.component.ts
rename to client/src/app/instance/search/components/result/renderer/detail-renderer.component.ts
diff --git a/client/src/app/instance/shared-search/components/datatable/renderer/download-renderer.component.html b/client/src/app/instance/search/components/result/renderer/download-renderer.component.html
similarity index 100%
rename from client/src/app/instance/shared-search/components/datatable/renderer/download-renderer.component.html
rename to client/src/app/instance/search/components/result/renderer/download-renderer.component.html
diff --git a/client/src/app/instance/shared-search/components/datatable/renderer/download-renderer.component.spec.ts b/client/src/app/instance/search/components/result/renderer/download-renderer.component.spec.ts
similarity index 93%
rename from client/src/app/instance/shared-search/components/datatable/renderer/download-renderer.component.spec.ts
rename to client/src/app/instance/search/components/result/renderer/download-renderer.component.spec.ts
index f2603916e0fc2ed12452b9b44c2e25cac6cfa152..0f1f1dd3f8e70ac496d1c375a6c7f26a861a931d 100644
--- a/client/src/app/instance/shared-search/components/datatable/renderer/download-renderer.component.spec.ts
+++ b/client/src/app/instance/search/components/result/renderer/download-renderer.component.spec.ts
@@ -4,7 +4,7 @@ import { HttpClientTestingModule } from '@angular/common/http/testing';
 import { DownloadRendererComponent } from './download-renderer.component';
 import { AppConfigService } from '../../../../../app-config.service';
 
-describe('[Instance][SharedSearch][Components][Datatable][Renderer] DownloadRendererComponent', () => {
+describe('[Instance][Search][Component][Result][Renderer] DownloadRendererComponent', () => {
     let component: DownloadRendererComponent;
     let fixture: ComponentFixture<DownloadRendererComponent>;
     let appConfigServiceStub = new AppConfigService();
diff --git a/client/src/app/instance/shared-search/components/datatable/renderer/download-renderer.component.ts b/client/src/app/instance/search/components/result/renderer/download-renderer.component.ts
similarity index 94%
rename from client/src/app/instance/shared-search/components/datatable/renderer/download-renderer.component.ts
rename to client/src/app/instance/search/components/result/renderer/download-renderer.component.ts
index fd006db6c90ad0efbddc76b1d997beaf66b7558e..db6f92c8d0abe1335808f6017f972f99a488ae90 100644
--- a/client/src/app/instance/shared-search/components/datatable/renderer/download-renderer.component.ts
+++ b/client/src/app/instance/search/components/result/renderer/download-renderer.component.ts
@@ -37,7 +37,7 @@ export class DownloadRendererComponent {
      * @return string
      */
     getHref(): string {
-        return getHost(this.appConfig.apiUrl) + '/download-file/' + this.datasetName + '/' + this.value;
+        return `${getHost(this.appConfig.apiUrl)}/download-file/${this.datasetName}/${this.value}`;
     }
 
     /**
diff --git a/client/src/app/instance/shared-search/components/datatable/renderer/image-renderer.component.html b/client/src/app/instance/search/components/result/renderer/image-renderer.component.html
similarity index 100%
rename from client/src/app/instance/shared-search/components/datatable/renderer/image-renderer.component.html
rename to client/src/app/instance/search/components/result/renderer/image-renderer.component.html
diff --git a/client/src/app/instance/shared-search/components/datatable/renderer/image-renderer.component.spec.ts b/client/src/app/instance/search/components/result/renderer/image-renderer.component.spec.ts
similarity index 94%
rename from client/src/app/instance/shared-search/components/datatable/renderer/image-renderer.component.spec.ts
rename to client/src/app/instance/search/components/result/renderer/image-renderer.component.spec.ts
index eb865f56e0ddac4bd3514be647816e4e7879c04d..a725dd3e9e2ca8db6e53134ccc48cd7c31a29c2a 100644
--- a/client/src/app/instance/shared-search/components/datatable/renderer/image-renderer.component.spec.ts
+++ b/client/src/app/instance/search/components/result/renderer/image-renderer.component.spec.ts
@@ -5,7 +5,7 @@ import { ModalModule } from 'ngx-bootstrap/modal';
 import { ImageRendererComponent } from './image-renderer.component';
 import { AppConfigService } from '../../../../../app-config.service';
 
-describe('[Instance][SharedSearch][Components][Datatable][Renderer] ImageRendererComponent', () => {
+describe('[Instance][Search][Component][Result][Renderer] ImageRendererComponent', () => {
     let component: ImageRendererComponent;
     let fixture: ComponentFixture<ImageRendererComponent>;
     let appConfigServiceStub = new AppConfigService();
diff --git a/client/src/app/instance/shared-search/components/datatable/renderer/image-renderer.component.ts b/client/src/app/instance/search/components/result/renderer/image-renderer.component.ts
similarity index 100%
rename from client/src/app/instance/shared-search/components/datatable/renderer/image-renderer.component.ts
rename to client/src/app/instance/search/components/result/renderer/image-renderer.component.ts
diff --git a/client/src/app/instance/shared-search/components/datatable/renderer/index.ts b/client/src/app/instance/search/components/result/renderer/index.ts
similarity index 100%
rename from client/src/app/instance/shared-search/components/datatable/renderer/index.ts
rename to client/src/app/instance/search/components/result/renderer/index.ts
diff --git a/client/src/app/instance/shared-search/components/datatable/renderer/json-renderer.component.html b/client/src/app/instance/search/components/result/renderer/json-renderer.component.html
similarity index 100%
rename from client/src/app/instance/shared-search/components/datatable/renderer/json-renderer.component.html
rename to client/src/app/instance/search/components/result/renderer/json-renderer.component.html
diff --git a/client/src/app/instance/shared-search/components/datatable/renderer/json-renderer.component.spec.ts b/client/src/app/instance/search/components/result/renderer/json-renderer.component.spec.ts
similarity index 88%
rename from client/src/app/instance/shared-search/components/datatable/renderer/json-renderer.component.spec.ts
rename to client/src/app/instance/search/components/result/renderer/json-renderer.component.spec.ts
index 9139c33d5b468a0a363a5010a35824d7e023443f..0fc93966d3b1abd29d03cc884d236276c93542aa 100644
--- a/client/src/app/instance/shared-search/components/datatable/renderer/json-renderer.component.spec.ts
+++ b/client/src/app/instance/search/components/result/renderer/json-renderer.component.spec.ts
@@ -5,7 +5,7 @@ import { NgxJsonViewerModule } from 'ngx-json-viewer';
 
 import { JsonRendererComponent } from './json-renderer.component';
 
-describe('[Instance][SharedSearch][Components][Datatable][Renderer] JsonRendererComponent', () => {
+describe('[Instance][Search][Component][Result][Renderer] JsonRendererComponent', () => {
     let component: JsonRendererComponent;
     let fixture: ComponentFixture<JsonRendererComponent>;
 
diff --git a/client/src/app/instance/shared-search/components/datatable/renderer/json-renderer.component.ts b/client/src/app/instance/search/components/result/renderer/json-renderer.component.ts
similarity index 100%
rename from client/src/app/instance/shared-search/components/datatable/renderer/json-renderer.component.ts
rename to client/src/app/instance/search/components/result/renderer/json-renderer.component.ts
diff --git a/client/src/app/instance/shared-search/components/datatable/renderer/link-renderer.component.html b/client/src/app/instance/search/components/result/renderer/link-renderer.component.html
similarity index 100%
rename from client/src/app/instance/shared-search/components/datatable/renderer/link-renderer.component.html
rename to client/src/app/instance/search/components/result/renderer/link-renderer.component.html
diff --git a/client/src/app/instance/shared-search/components/datatable/renderer/link-renderer.component.spec.ts b/client/src/app/instance/search/components/result/renderer/link-renderer.component.spec.ts
similarity index 93%
rename from client/src/app/instance/shared-search/components/datatable/renderer/link-renderer.component.spec.ts
rename to client/src/app/instance/search/components/result/renderer/link-renderer.component.spec.ts
index 1d868f491099e469156b6b4dda59929c19420bd9..c00b17c47cb4d1eca107afd30e00be975de37a61 100644
--- a/client/src/app/instance/shared-search/components/datatable/renderer/link-renderer.component.spec.ts
+++ b/client/src/app/instance/search/components/result/renderer/link-renderer.component.spec.ts
@@ -2,7 +2,7 @@ import { ComponentFixture, TestBed } from '@angular/core/testing';
 
 import { LinkRendererComponent } from './link-renderer.component';
 
-describe('[Instance][SharedSearch][Components][Datatable][Renderer] LinkRendererComponent', () => {
+describe('[Instance][Search][Component][Result][Renderer] LinkRendererComponent', () => {
     let component: LinkRendererComponent;
     let fixture: ComponentFixture<LinkRendererComponent>;
 
diff --git a/client/src/app/instance/shared-search/components/datatable/renderer/link-renderer.component.ts b/client/src/app/instance/search/components/result/renderer/link-renderer.component.ts
similarity index 100%
rename from client/src/app/instance/shared-search/components/datatable/renderer/link-renderer.component.ts
rename to client/src/app/instance/search/components/result/renderer/link-renderer.component.ts
diff --git a/client/src/app/instance/search/components/result/url-display.component.ts b/client/src/app/instance/search/components/result/url-display.component.ts
index 9cd35d7a64f478201359f8c0d41a2c426b428f7a..145a36d0454449a3ed1e636d26b8270408cdd660 100644
--- a/client/src/app/instance/search/components/result/url-display.component.ts
+++ b/client/src/app/instance/search/components/result/url-display.component.ts
@@ -13,7 +13,7 @@ import { ToastrService } from 'ngx-toastr';
 
 import { Criterion, ConeSearch, criterionToString } from 'src/app/instance/store/models';
 import { Dataset } from 'src/app/metamodel/models';
-import { getHost as host } from 'src/app/shared/utils';
+import { getHost } from 'src/app/shared/utils';
 import { AppConfigService } from 'src/app/app-config.service';
 
 /**
@@ -60,12 +60,12 @@ export class UrlDisplayComponent {
      * @return string
      */
     getUrl(): string {
-        let query: string = host(this.appConfig.apiUrl) + '/search/' + this.datasetSelected + '?a=' + this.outputList.join(';');
+        let query: string = `${getHost(this.appConfig.apiUrl)}/search/${this.datasetSelected}?a=${this.outputList.join(';')}`;
         if (this.criteriaList.length > 0) {
-            query += '&c=' + this.criteriaList.map(criterion => criterionToString(criterion)).join(';');
+            query += `&c=${this.criteriaList.map(criterion => criterionToString(criterion)).join(';')}`;
         }
         if (this.coneSearch) {
-            query += '&cs=' + this.coneSearch.ra + ':' + this.coneSearch.dec + ':' + this.coneSearch.radius;
+            query += `&cs=${this.coneSearch.ra}:${this.coneSearch.dec}:${this.coneSearch.radius}`;
         }
         return query;
     }
diff --git a/client/src/app/instance/shared-search/detail/containers/detail.component.html b/client/src/app/instance/search/containers/detail.component.html
similarity index 100%
rename from client/src/app/instance/shared-search/detail/containers/detail.component.html
rename to client/src/app/instance/search/containers/detail.component.html
diff --git a/client/src/app/instance/shared-search/detail/containers/detail.component.spec.ts b/client/src/app/instance/search/containers/detail.component.spec.ts
similarity index 93%
rename from client/src/app/instance/shared-search/detail/containers/detail.component.spec.ts
rename to client/src/app/instance/search/containers/detail.component.spec.ts
index b85dbe3a391fa80a25aabd5aea534e900a1bc798..ddaaa8513ba45b09830c2107331a4b82abbb11f7 100644
--- a/client/src/app/instance/shared-search/detail/containers/detail.component.spec.ts
+++ b/client/src/app/instance/search/containers/detail.component.spec.ts
@@ -6,13 +6,13 @@ import { provideMockStore, MockStore } from '@ngrx/store/testing';
 import { of } from 'rxjs';
 
 import { DetailComponent } from './detail.component';
-import { Attribute, OutputCategory, OutputFamily } from '../../../../metamodel/models';
+import { Attribute, OutputCategory, OutputFamily } from 'src/app/metamodel/models';
 import { SortByDetailDisplay } from '../pipes/sort-by-detail-display';
-import { ATTRIBUTE_LIST } from '../../../../../test-data';
+import { ATTRIBUTE_LIST } from 'src/test-data';
 import * as detailActions from 'src/app/instance/store/actions/detail.actions';
-import * as searchActions from '../../../store/actions/search.actions';
+import * as searchActions from 'src/app/instance/store/actions/search.actions';
 
-describe('[Instance][SharedSearch][Detail][Container] DetailComponent', () => {
+describe('[Instance][Search][Container] DetailComponent', () => {
     @Component({ selector: 'app-spinner', template: '' })
     class SpinnerStubComponent { }
 
diff --git a/client/src/app/instance/shared-search/detail/containers/detail.component.ts b/client/src/app/instance/search/containers/detail.component.ts
similarity index 100%
rename from client/src/app/instance/shared-search/detail/containers/detail.component.ts
rename to client/src/app/instance/search/containers/detail.component.ts
diff --git a/client/src/app/instance/search/pipes/index.ts b/client/src/app/instance/search/pipes/index.ts
index 6eaab8119e41b4a54361403d8cefced8cafbbbfd..62fb1bc8a53933e8a12109a1d2c3da4872cefb95 100644
--- a/client/src/app/instance/search/pipes/index.ts
+++ b/client/src/app/instance/search/pipes/index.ts
@@ -9,8 +9,10 @@
 
 import { SortByCriteriaDisplayPipe } from './sort-by-criteria-display.pipe';
 import { SortByOutputDisplayPipe } from './sort-by-output-display.pipe';
+import { SortByDetailDisplay } from './sort-by-detail-display';
 
 export const searchPipes = [
     SortByCriteriaDisplayPipe,
-    SortByOutputDisplayPipe
+    SortByOutputDisplayPipe,
+    SortByDetailDisplay
 ];
\ No newline at end of file
diff --git a/client/src/app/instance/shared-search/detail/pipes/sort-by-detail-display.spec.ts b/client/src/app/instance/search/pipes/sort-by-detail-display.spec.ts
similarity index 92%
rename from client/src/app/instance/shared-search/detail/pipes/sort-by-detail-display.spec.ts
rename to client/src/app/instance/search/pipes/sort-by-detail-display.spec.ts
index f1f948124faf991d70828424ec328f8754811aeb..750ff3eb619b4d01d6b6728b7a30e3592d2ee2aa 100644
--- a/client/src/app/instance/shared-search/detail/pipes/sort-by-detail-display.spec.ts
+++ b/client/src/app/instance/search/pipes/sort-by-detail-display.spec.ts
@@ -1,7 +1,7 @@
 import { SortByDetailDisplay } from './sort-by-detail-display';
-import { Attribute } from '../../../../metamodel/models';
+import { Attribute } from '../../../metamodel/models';
 
-describe('[Instance][SharedSearch][Detail][Pipes] SortByDetailDisplay', () => {
+describe('[Instance][Search][Pipe] SortByDetailDisplay', () => {
     let pipe = new SortByDetailDisplay();
 
     it('sorts attributeList by display detail', () => {
diff --git a/client/src/app/instance/shared-search/detail/pipes/sort-by-detail-display.ts b/client/src/app/instance/search/pipes/sort-by-detail-display.ts
similarity index 100%
rename from client/src/app/instance/shared-search/detail/pipes/sort-by-detail-display.ts
rename to client/src/app/instance/search/pipes/sort-by-detail-display.ts
diff --git a/client/src/app/instance/search/search-routing.module.ts b/client/src/app/instance/search/search-routing.module.ts
index 29b3c5b7909bcbf1d7ba41f3364b63c8b18e5416..99db7769547562ba4d0b46fd11db8a51d743f0fb 100644
--- a/client/src/app/instance/search/search-routing.module.ts
+++ b/client/src/app/instance/search/search-routing.module.ts
@@ -15,7 +15,7 @@ import { DatasetComponent } from './containers/dataset.component';
 import { CriteriaComponent } from './containers/criteria.component';
 import { OutputComponent } from './containers/output.component';
 import { ResultComponent } from './containers/result.component';
-import { DetailComponent } from '../shared-search/detail/containers/detail.component';
+import { DetailComponent } from './containers/detail.component';
 
 const routes: Routes = [
     { path: 'detail/:dname/:id', component: DetailComponent },
@@ -46,5 +46,6 @@ export const routedComponents = [
     DatasetComponent,
     CriteriaComponent,
     OutputComponent,
-    ResultComponent
+    ResultComponent,
+    DetailComponent
 ];
diff --git a/client/src/app/instance/search/search.module.ts b/client/src/app/instance/search/search.module.ts
index d47b2111a252aaa1899775619218af551bebf384..2109154c13b7a32d7d1d041d86b59d1e95da69f4 100644
--- a/client/src/app/instance/search/search.module.ts
+++ b/client/src/app/instance/search/search.module.ts
@@ -10,7 +10,7 @@
 import { NgModule } from '@angular/core';
 
 import { SharedModule } from 'src/app/shared/shared.module';
-import { SharedSearchModule } from '../shared-search/shared-search.module';
+import { ConeSearchModule } from '../cone-search/cone-search.module';
 import { SearchRoutingModule, routedComponents } from './search-routing.module';
 import { dummiesComponents } from './components';
 import { searchPipes } from './pipes';
@@ -22,7 +22,7 @@ import { searchPipes } from './pipes';
 @NgModule({
     imports: [
         SharedModule,
-        SharedSearchModule,
+        ConeSearchModule,
         SearchRoutingModule
     ],
     declarations: [
diff --git a/client/src/app/instance/shared-search/components/datatable/index.ts b/client/src/app/instance/shared-search/components/datatable/index.ts
deleted file mode 100644
index b3e2ef177ec0b7a8c7d35421411b532649ce9cda..0000000000000000000000000000000000000000
--- a/client/src/app/instance/shared-search/components/datatable/index.ts
+++ /dev/null
@@ -1,7 +0,0 @@
-import { DatatableComponent } from './datatable.component';
-import { rendererComponents } from './renderer';
-
-export const datatableComponents = [
-    DatatableComponent,
-    rendererComponents
-];
diff --git a/client/src/app/instance/shared-search/components/index.ts b/client/src/app/instance/shared-search/components/index.ts
deleted file mode 100644
index 1bd2ebbdd5b479facf234dd6ba38ab4ef88f589e..0000000000000000000000000000000000000000
--- a/client/src/app/instance/shared-search/components/index.ts
+++ /dev/null
@@ -1,7 +0,0 @@
-import { coneSearchComponents } from './cone-search';
-import { datatableComponents } from './datatable';
-
-export const sharedComponents = [
-    coneSearchComponents,
-    datatableComponents
-];
diff --git a/client/src/app/instance/shared-search/detail/pipes/index.ts b/client/src/app/instance/shared-search/detail/pipes/index.ts
deleted file mode 100644
index a42bb61221d4720af663e83ca2f4413405bc688d..0000000000000000000000000000000000000000
--- a/client/src/app/instance/shared-search/detail/pipes/index.ts
+++ /dev/null
@@ -1,5 +0,0 @@
-import { SortByDetailDisplay } from './sort-by-detail-display';
-
-export const detailPipes = [
-    SortByDetailDisplay
-];
diff --git a/client/src/app/instance/shared-search/pipes/index.ts b/client/src/app/instance/shared-search/pipes/index.ts
deleted file mode 100644
index 08f7ea71266c9784c9dcfa00a5f7f57524d069ff..0000000000000000000000000000000000000000
--- a/client/src/app/instance/shared-search/pipes/index.ts
+++ /dev/null
@@ -1,5 +0,0 @@
-import { PrettyOperatorPipe } from './pretty-operator.pipe';
-
-export const sharedPipes = [
-    PrettyOperatorPipe
-];
diff --git a/client/src/app/instance/shared-search/pipes/pretty-operator.pipe.spec.ts b/client/src/app/instance/shared-search/pipes/pretty-operator.pipe.spec.ts
deleted file mode 100644
index bac3aa07bdb20627c7dedbb2a145f15e3eeab812..0000000000000000000000000000000000000000
--- a/client/src/app/instance/shared-search/pipes/pretty-operator.pipe.spec.ts
+++ /dev/null
@@ -1,49 +0,0 @@
-import { PrettyOperatorPipe } from './pretty-operator.pipe';
-
-describe('[Instance][SharedSearch][Pipes] PrettyOperatorPipe', () => {
-    let pipe = new PrettyOperatorPipe();
-
-    it('transforms "eq" to "="', () => {
-        expect(pipe.transform('eq')).toBe('=');
-    });
-
-    it('transforms "neq" to "≠"', () => {
-        expect(pipe.transform('neq')).toBe('≠');
-    });
-
-    it('transforms "gt" to ">"', () => {
-        expect(pipe.transform('gt')).toBe('>');
-    });
-
-    it('transforms "gte" to ">="', () => {
-        expect(pipe.transform('gte')).toBe('>=');
-    });
-
-    it('transforms "lt" to "<"', () => {
-        expect(pipe.transform('lt')).toBe('<');
-    });
-
-    it('transforms "lte" to "<="', () => {
-        expect(pipe.transform('lte')).toBe('<=');
-    });
-
-    it('transforms "lk" to "like"', () => {
-        expect(pipe.transform('lk')).toBe('like');
-    });
-
-    it('transforms "nlk" to "not like"', () => {
-        expect(pipe.transform('nlk')).toBe('not like');
-    });
-
-    it('transforms "in" to "in"', () => {
-        expect(pipe.transform('in')).toBe('in');
-    });
-
-    it('transforms "nin" to "not in"', () => {
-        expect(pipe.transform('nin')).toBe('not in');
-    });
-
-    it('not transforms unknown operator', () => {
-        expect(pipe.transform('toto')).toBe('toto');
-    });
-});
diff --git a/client/src/app/instance/shared-search/pipes/pretty-operator.pipe.ts b/client/src/app/instance/shared-search/pipes/pretty-operator.pipe.ts
deleted file mode 100644
index 05cd736fa5c7d1c2de6b821219de14df9b409850..0000000000000000000000000000000000000000
--- a/client/src/app/instance/shared-search/pipes/pretty-operator.pipe.ts
+++ /dev/null
@@ -1,27 +0,0 @@
-/**
- * This file is part of Anis Client.
- *
- * @copyright Laboratoire d'Astrophysique de Marseille / CNRS
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-import { Pipe, PipeTransform } from '@angular/core';
-
-import { getPrettyOperator } from 'src/app/instance/store/models';
-
-/**
- * @class
- * @classdesc Translate Anis string operator to a pretty form label operator.
- *
- * @example
- * // formats eq to =
- * {{ eq | prettyOperator }}
- */
-@Pipe({ name: 'prettyOperator' })
-export class PrettyOperatorPipe implements PipeTransform {
-    transform(operator: string): string {
-        return getPrettyOperator(operator);
-    }
-}
diff --git a/client/src/app/instance/store/effects/detail.effects.ts b/client/src/app/instance/store/effects/detail.effects.ts
index 2a18c7ff61ff9392494d74f4b1ab4313944ed118..941f318d5ab5563666b0bbbc78334f47de607d15 100644
--- a/client/src/app/instance/store/effects/detail.effects.ts
+++ b/client/src/app/instance/store/effects/detail.effects.ts
@@ -39,7 +39,7 @@ export class DetailEffects {
                 this.store.select(attributeSelector.selectAllAttributes),
                 this.store.select(detailSelector.selectIdByRoute)
             ]),
-            mergeMap(([action, datasetName, attributeList, id]) => this.detailService.retrieveObject(
+            mergeMap(([, datasetName, attributeList, id]) => this.detailService.retrieveObject(
                 datasetName,
                 attributeList.find(attribute => attribute.order_by).id,
                 id,
diff --git a/client/src/app/instance/store/effects/search-multiple.effects.ts b/client/src/app/instance/store/effects/search-multiple.effects.ts
index 2cd1eeab2499f9ad5e1ca91ba7d6dfda8768c8f1..129727b1be6ec10ef13edab17cbb4e49947e947e 100644
--- a/client/src/app/instance/store/effects/search-multiple.effects.ts
+++ b/client/src/app/instance/store/effects/search-multiple.effects.ts
@@ -40,7 +40,7 @@ export class SearchMultipleEffects {
                 this.store.select(instanceSelector.selectInstanceByRouteName),
                 this.store.select(datasetSelector.selectAllConeSearchDatasets)
             ]),
-            mergeMap(([action, pristine, coneSearchByRoute, selectedDatasetsByRoute, instance, datasetList]) => {
+            mergeMap(([, pristine, coneSearchByRoute, selectedDatasetsByRoute, instance, datasetList]) => {
                 // Restart search
                 if (!pristine && !coneSearchByRoute) {
                     return [
@@ -110,7 +110,7 @@ export class SearchMultipleEffects {
                 this.store.select(searchMultipleSelector.selectSelectedDatasets),
                 this.store.select(coneSearchSelector.selectConeSearch)
             ]),
-            mergeMap(([action, selectedDatasets, coneSearch]) => {
+            mergeMap(([, selectedDatasets, coneSearch]) => {
                 const queries = selectedDatasets.map(datasetName => this.searchService.retrieveDataLength(
                     `${datasetName}?a=count&cs=${coneSearch.ra}:${coneSearch.dec}:${coneSearch.radius}`
                 ).pipe(
diff --git a/client/src/app/instance/store/effects/search.effects.ts b/client/src/app/instance/store/effects/search.effects.ts
index 42fe09265780b2421e4e2741f9e94064ec580950..157f1b275b37819acf76c9e0495d81e2b19ba250 100644
--- a/client/src/app/instance/store/effects/search.effects.ts
+++ b/client/src/app/instance/store/effects/search.effects.ts
@@ -47,8 +47,8 @@ export class SearchEffects {
                 this.store.select(searchSelector.selectPristine),
                 this.store.select(searchSelector.selectStepsByRoute)
             ]),
-            mergeMap(([action, datasetName, currentDataset, pristine, steps]) => {
-                // User has changed dataset: reload initial state + init search
+            mergeMap(([, datasetName, currentDataset, pristine, steps]) => {
+                // User has changed dataset: reload initial state and init search
                 if (datasetName && currentDataset && datasetName !== currentDataset) {
                     return of(searchActions.restartSearch());
                 }
@@ -111,7 +111,7 @@ export class SearchEffects {
                 this.store.select(coneSearchSelector.selectConeSearchByRoute),
                 this.store.select(searchSelector.selectOutputListByRoute)
             ]),
-            mergeMap(([action, pristine, currentDataset, attributeList, criteriaList, coneSearch, outputList]) => {
+            mergeMap(([, pristine, currentDataset, attributeList, criteriaList, coneSearch, outputList]) => {
                 // Default form parameters already loaded or no dataset selected
                 if (!pristine || !currentDataset) {
                     return of({ type: '[No Action] Load Default Form Parameters' });
@@ -178,13 +178,13 @@ export class SearchEffects {
                 this.store.select(searchSelector.selectCriteriaList),
                 this.store.select(coneSearchSelector.selectConeSearch)
             ]),
-            mergeMap(([action, datasetName, criteriaList, coneSearch]) => {
-                let query = datasetName + '?a=count';
+            mergeMap(([, datasetName, criteriaList, coneSearch]) => {
+                let query = `${datasetName}?a=count`;
                 if (criteriaList.length > 0) {
-                    query += '&c=' + criteriaList.map(criterion => criterionToString(criterion)).join(';');
+                    query += `&c=${criteriaList.map(criterion => criterionToString(criterion)).join(';')}`;
                 }
                 if (coneSearch) {
-                    query += '&cs=' + coneSearch.ra + ':' + coneSearch.dec + ':' + coneSearch.radius;
+                    query += `&cs=${coneSearch.ra}:${coneSearch.dec}:${coneSearch.radius}`;
                 }
 
                 return this.searchService.retrieveDataLength(query)
@@ -219,16 +219,16 @@ export class SearchEffects {
                 this.store.select(searchSelector.selectOutputList)
             ]),
             mergeMap(([action, datasetName, criteriaList, coneSearch, outputList]) => {
-                let query = datasetName + '?a=' + outputList.join(';');
+                let query = `${datasetName}?a=${outputList.join(';')}`;
                 if (criteriaList.length > 0) {
-                    query += '&c=' + criteriaList.map(criterion => criterionToString(criterion)).join(';');
+                    query += `&c=${criteriaList.map(criterion => criterionToString(criterion)).join(';')}`;
                 }
                 if (coneSearch) {
-                    query += '&cs=' + coneSearch.ra + ':' + coneSearch.dec + ':' + coneSearch.radius;
+                    query += `&cs=${coneSearch.ra}:${coneSearch.dec}:${coneSearch.radius}`;
                 }
 
-                query += '&p=' + action.pagination.nbItems + ':' + action.pagination.page;
-                query += '&o=' + action.pagination.sortedCol + ':' + action.pagination.order;
+                query += `&p=${action.pagination.nbItems}:${action.pagination.page}`;
+                query += `&o=${action.pagination.sortedCol}:${action.pagination.order}`;
 
                 return this.searchService.retrieveData(query)
                     .pipe(
diff --git a/client/src/app/instance/store/effects/svom-json-kw.effects.ts b/client/src/app/instance/store/effects/svom-json-kw.effects.ts
index c6d32c75943ed0bd426e1476dbf21ded68578c5d..2a50a0edfd4b1b73b5a4ba5abf05e7104fd3b5cb 100644
--- a/client/src/app/instance/store/effects/svom-json-kw.effects.ts
+++ b/client/src/app/instance/store/effects/svom-json-kw.effects.ts
@@ -37,7 +37,7 @@ export class SvomJsonKwEffects {
         this.actions$.pipe(
             ofType(svomJsonKwActions.loadKwSearchable),
             concatLatestFrom(() => this.store.select(svomJsonKwSelector.selectAcronymSelected)),
-            mergeMap(([action, acronymSelected]) => this.svomJsonKwService.loadKwSearchable(acronymSelected)
+            mergeMap(([, acronymSelected]) => this.svomJsonKwService.loadKwSearchable(acronymSelected)
                 .pipe(
                     map(svomKeywords => svomJsonKwActions.loadKwSearchableSuccess({ svomKeywords })),
                     catchError(() => of(svomJsonKwActions.loadKwSearchableFail()))
diff --git a/client/src/app/instance/store/models/criterion.model.ts b/client/src/app/instance/store/models/criterion.model.ts
index f91cd67b956daea79846c5dd025583345bd942da..da306a4381d62ba2a15acd73cb76ef3a6cdd644b 100644
--- a/client/src/app/instance/store/models/criterion.model.ts
+++ b/client/src/app/instance/store/models/criterion.model.ts
@@ -37,33 +37,32 @@ export interface Criterion {
  * criterionToString(criterion)
  */
 export const criterionToString = (criterion: Criterion): string => {
-    console.log(criterion);
     let str: string = criterion.id.toString();
     if (criterion.type === 'between') {
         const bw = criterion as BetweenCriterion;
         if (bw.min === null) {
-            str += '::lte::' + bw.max;
+            str += `::lte::${bw.max}`;
         } else if (bw.max === null) {
-            str += '::gte::' + bw.min;
+            str += `::gte::${bw.min}`;
         } else {
-            str += '::bw::' + bw.min + '|' + bw.max;
+            str += `::bw::${bw.min}|${bw.max}`;
         }
     }
     if (criterion.type === 'field') {
         const fd = criterion as FieldCriterion;
-        str += '::' + fd.operator + '::' + fd.value;
+        str += `::${fd.operator}::${fd.value}`;
     }
     if (criterion.type === 'list') {
         const ls = criterion as ListCriterion;
-        str += '::in::' + ls.values.join('|');
+        str += `::in::${ls.values.join('|')}`;
     }
     if (criterion.type === 'json') {
         const json = criterion as JsonCriterion;
-        str += '::js::' + json.path + '|' + json.operator + '|' + json.value;
+        str += `::js::${json.path}|${json.operator}|${json.value}`;
     }
     if (criterion.type === 'multiple') {
         const multiple = criterion as SelectMultipleCriterion;
-        str += '::in::' + multiple.options.map(option => option.value).join('|');
+        str += `::in::${multiple.options.map(option => option.value).join('|')}`;
     }
     return str;
 }
@@ -153,24 +152,24 @@ export const getPrettyCriterion = (criterion: Criterion): string => {
         case 'between':
             const bw = criterion as BetweenCriterion;
             if (bw.min === null) {
-                return '<= ' + bw.max;
+                return `<= ${bw.max}`;
             } else if (bw.max === null) {
-                return '>= ' + bw.min;
+                return `>= ${bw.min}`;
             } else {
-                return '∈ [' + bw.min + ';' + bw.max + ']';
+                return `∈ [${bw.min};${bw.max}]`;
             }
         case 'field':
             const fd = criterion as FieldCriterion;
-            return getPrettyOperator(fd.operator) + ' ' + fd.value.split('|').join(', ');
+            return `${getPrettyOperator(fd.operator)} ${fd.value.split('|').join(', ')}`;
         case 'list':
             const ls = criterion as ListCriterion;
-            return '= [' + ls.values.join(',') + ']';
+            return `= [${ls.values.join(',')}]`;
         case 'json' :
             const json = criterion as JsonCriterion;
-            return json.path + ' ' + json.operator + ' ' + json.value;
+            return `${json.path} ${json.operator} ${json.value}`;
         case 'multiple':
             const multiple = criterion as SelectMultipleCriterion;
-            return '[' + multiple.options.map(option => option.label).join(',') + ']';
+            return `[${multiple.options.map(option => option.label).join(',')}]`;
         default:
             return 'Criterion type not valid!';
     }
diff --git a/client/src/app/instance/store/selectors/search-multiple.selector.ts b/client/src/app/instance/store/selectors/search-multiple.selector.ts
index 61ae2e99501760bef036054717ac11ad5408ad42..f505bf0618b945beda21741ed178a680f95058ba 100644
--- a/client/src/app/instance/store/selectors/search-multiple.selector.ts
+++ b/client/src/app/instance/store/selectors/search-multiple.selector.ts
@@ -89,7 +89,7 @@ export const selectQueryParams = createSelector(
         if (coneSearch) {
             queryParams = {
                 ...queryParams,
-                cs: coneSearch.ra + ':' + coneSearch.dec + ':' + coneSearch.radius
+                cs: `${coneSearch.ra}:${coneSearch.dec}:${coneSearch.radius}`
             };
         }
         if (selectedDatasets.length > 0) {
diff --git a/client/src/app/instance/store/selectors/search.selector.ts b/client/src/app/instance/store/selectors/search.selector.ts
index 44ebe388b9cde19e8bbfe3eff35a5bb9e7b68ecd..968e07b19bae8ca98cff3634001c8425651e5fbb 100644
--- a/client/src/app/instance/store/selectors/search.selector.ts
+++ b/client/src/app/instance/store/selectors/search.selector.ts
@@ -124,7 +124,7 @@ export const selectQueryParams = createSelector(
         if (coneSearch) {
             queryParams = {
                 ...queryParams,
-                cs: coneSearch.ra + ':' + coneSearch.dec + ':' + coneSearch.radius
+                cs: `${coneSearch.ra}:${coneSearch.dec}:${coneSearch.radius}`
             };
         }
         if (criteriaList.length > 0) {
diff --git a/client/src/app/instance/store/services/cone-search.service.ts b/client/src/app/instance/store/services/cone-search.service.ts
index 37c3420e5f1af5b426de2cf6bc6c8885e152f8bb..985bf2d84390e059f0563dc43b6c56f76e9bb5b2 100644
--- a/client/src/app/instance/store/services/cone-search.service.ts
+++ b/client/src/app/instance/store/services/cone-search.service.ts
@@ -27,7 +27,7 @@ export class ConeSearchService {
      * @return Observable<any>
      */
     retrieveCoordinates(name: string): Observable<any> {
-        const url = 'https://cdsweb.u-strasbg.fr/cgi-bin/nph-sesame/-ox/NSV?' + name;
+        const url = `https://cdsweb.u-strasbg.fr/cgi-bin/nph-sesame/-ox/NSV?${name}`;
         return this.http.get(url, { responseType: 'text' });
     }
 }
diff --git a/client/src/app/instance/store/services/detail.service.ts b/client/src/app/instance/store/services/detail.service.ts
index 78b90758a95277c0fff8f1a394253fdaebcb55d1..e9b644aa71907475302f8ffbc31187f4daa59ccd 100644
--- a/client/src/app/instance/store/services/detail.service.ts
+++ b/client/src/app/instance/store/services/detail.service.ts
@@ -33,8 +33,8 @@ export class DetailService {
      * @return Observable<any[]>
      */
     retrieveObject(dname: string, criterionId: number, objectSelected: string, outputList: number[]): Observable<any[]> {
-        const query = dname + '?c=' + criterionId + '::eq::' + objectSelected + '&a=' + outputList.join(';');
-        return this.http.get<any[]>(this.config.apiUrl + '/search/' + query);
+        const query = `${dname}?c=${criterionId}::eq::${objectSelected}&a=${outputList.join(';')}`;
+        return this.http.get<any[]>(`${this.config.apiUrl}/search/${query}`);
     }
 
     /**
@@ -46,6 +46,6 @@ export class DetailService {
      * @return Observable<string>
      */
     retrieveSpectra(dname: string, spectraFile: string): Observable<string> {
-        return this.http.get(this.config.servicesUrl + '/spectra-to-csv/' + dname + '?filename=' + spectraFile, { responseType: 'text' });
+        return this.http.get(`${this.config.servicesUrl}/spectra-to-csv/${dname}?filename=${spectraFile}`, { responseType: 'text' });
     }
 }
diff --git a/client/src/app/instance/store/services/samp.service.ts b/client/src/app/instance/store/services/samp.service.ts
index b74eeae43bb557ee0b979bac52a443ac426d9a24..ebc95cbed6a0e343ba7bd671ba38256c39b96ea3 100644
--- a/client/src/app/instance/store/services/samp.service.ts
+++ b/client/src/app/instance/store/services/samp.service.ts
@@ -24,14 +24,14 @@ export class SampService {
     private connector = null;
     
     constructor(private config: AppConfigService) {
-        const baseUrl = window.location.protocol + "//" + window.location.host + this.config.baseHref;
+        const baseUrl = `${window.location.protocol}//${window.location.host}${this.config.baseHref}`;
         const meta = {
             "samp.name": "ANIS",
             "samp.description.text": "AstroNomical Information System",
             "author.email": "cesamsi@lam.fr",
             "author.affiliation": "CeSAM, Laboratoire d'Astrophysique de Marseille",
             "home.page": "https://anis.lam.fr",
-            "samp.icon.url": baseUrl + "/assets/cesam_anis40.png"
+            "samp.icon.url": `${baseUrl}/assets/cesam_anis40.png`
         };
         this.connector = new samp.Connector("anis-client", meta);
     }
diff --git a/client/src/app/instance/store/services/search.service.ts b/client/src/app/instance/store/services/search.service.ts
index 2bdfaa2f53dc15dd30173c720db1a6d93c2add19..25ecc535125888519341553df3dd837094706a33 100644
--- a/client/src/app/instance/store/services/search.service.ts
+++ b/client/src/app/instance/store/services/search.service.ts
@@ -30,7 +30,7 @@ export class SearchService {
      * @return Observable<any[]>
      */
     retrieveData(query: string): Observable<any[]> {
-        return this.http.get<any[]>(this.config.apiUrl + '/search/' + query);
+        return this.http.get<any[]>(`${this.config.apiUrl}/search/${query}`);
     }
 
     /**
@@ -41,6 +41,6 @@ export class SearchService {
      * @return Observable<{ nb: number }[]>
      */
     retrieveDataLength(query: string): Observable<{ nb: number }[]> {
-        return this.http.get<{ nb: number }[]>(this.config.apiUrl + '/search/' + query);
+        return this.http.get<{ nb: number }[]>(`${this.config.apiUrl}/search/${query}`);
     }
 }
diff --git a/client/src/app/metamodel/effects/attribute.effects.ts b/client/src/app/metamodel/effects/attribute.effects.ts
index 25cf0dd26a418101b9053a588f584b9d30b8a18a..855fe3301ff2a861979aeea5d3b851e64673e473 100644
--- a/client/src/app/metamodel/effects/attribute.effects.ts
+++ b/client/src/app/metamodel/effects/attribute.effects.ts
@@ -8,7 +8,6 @@
  */
 
 import { Injectable } from '@angular/core';
-import { Router } from '@angular/router';
 
 import { Actions, createEffect, ofType, concatLatestFrom } from '@ngrx/effects';
 import { Store } from '@ngrx/store';
@@ -26,7 +25,7 @@ export class AttributeEffects {
         this.actions$.pipe(
             ofType(attributeActions.loadAttributeList),
             concatLatestFrom(() => this.store.select(datasetSelector.selectDatasetNameByRoute)),
-            mergeMap(([action, datasetName]) => this.attributeService.retrieveAttributeList(datasetName)
+            mergeMap(([, datasetName]) => this.attributeService.retrieveAttributeList(datasetName)
                 .pipe(
                     map(attributes => attributeActions.loadAttributeListSuccess({ attributes })),
                     catchError(() => of(attributeActions.loadAttributeListFail()))
@@ -114,7 +113,6 @@ export class AttributeEffects {
     constructor(
         private actions$: Actions,
         private attributeService: AttributeService,
-        private router: Router,
         private toastr: ToastrService,
         private store: Store<{ }>
     ) {}
diff --git a/client/src/app/metamodel/effects/column.effects.ts b/client/src/app/metamodel/effects/column.effects.ts
index 2a61a72f0f92c10f9d534431430ab005e61d4065..53399092ae075c8302d67a01ed281cd5d35b6fd3 100644
--- a/client/src/app/metamodel/effects/column.effects.ts
+++ b/client/src/app/metamodel/effects/column.effects.ts
@@ -24,7 +24,7 @@ export class ColumnEffects {
         this.actions$.pipe(
             ofType(columnActions.loadColumnList),
             concatLatestFrom(() => this.store.select(datasetSelector.selectDatasetNameByRoute)),
-            mergeMap(([action, datasetName]) => this.columnService.retrieveColumns(datasetName)
+            mergeMap(([, datasetName]) => this.columnService.retrieveColumns(datasetName)
                 .pipe(
                     map(columns => columnActions.loadColumnListSuccess({ columns })),
                     catchError(() => of(columnActions.loadColumnListFail()))
diff --git a/client/src/app/metamodel/effects/criteria-family.effects.ts b/client/src/app/metamodel/effects/criteria-family.effects.ts
index 751acc9451da5cccb84350066c5b740194bc5a97..95894f4cf924558bf1f2fb125c6eebece5d65237 100644
--- a/client/src/app/metamodel/effects/criteria-family.effects.ts
+++ b/client/src/app/metamodel/effects/criteria-family.effects.ts
@@ -25,7 +25,7 @@ export class CriteriaFamilyEffects {
         this.actions$.pipe(
             ofType(criteriaFamilyActions.loadCriteriaFamilyList),
             concatLatestFrom(() => this.store.select(datasetSelector.selectDatasetNameByRoute)),
-            mergeMap(([action, datasetName]) => this.criteriaFamilyService.retrieveCriteriaFamilyList(datasetName)
+            mergeMap(([, datasetName]) => this.criteriaFamilyService.retrieveCriteriaFamilyList(datasetName)
                 .pipe(
                     map(criteriaFamilies => criteriaFamilyActions.loadCriteriaFamilyListSuccess({ criteriaFamilies })),
                     catchError(() => of(criteriaFamilyActions.loadCriteriaFamilyListFail()))
diff --git a/client/src/app/metamodel/effects/database.effects.ts b/client/src/app/metamodel/effects/database.effects.ts
index 39c20f7e43a15f87707f3d31cfbd924ba21ffbf7..0d2b2add88347833596b69248b8edf08bd5737e7 100644
--- a/client/src/app/metamodel/effects/database.effects.ts
+++ b/client/src/app/metamodel/effects/database.effects.ts
@@ -48,7 +48,7 @@ export class DatabaseEffects {
         this.actions$.pipe(
             ofType(databaseActions.addDatabaseSuccess),
             tap(() => {
-                this.router.navigate(['/admin/database-list']);
+                this.router.navigate(['/admin/database/database-list']);
                 this.toastr.success('Database successfully added', 'The new database was added into the database')
             })
         ), { dispatch: false}
@@ -77,7 +77,7 @@ export class DatabaseEffects {
         this.actions$.pipe(
             ofType(databaseActions.editDatabaseSuccess),
             tap(() => {
-                this.router.navigate(['/admin/database-list']);
+                this.router.navigate(['/admin/database/database-list']);
                 this.toastr.success('Database successfully edited', 'The existing database has been edited into the database')
             })
         ), { dispatch: false}
diff --git a/client/src/app/metamodel/effects/dataset-family.effects.ts b/client/src/app/metamodel/effects/dataset-family.effects.ts
index 18d03800ca2edde37df8976a2496678d4061cccb..c3aa0227097b011558ff28218103a39ccf42e5c4 100644
--- a/client/src/app/metamodel/effects/dataset-family.effects.ts
+++ b/client/src/app/metamodel/effects/dataset-family.effects.ts
@@ -26,7 +26,7 @@ export class DatasetFamilyEffects {
         this.actions$.pipe(
             ofType(datasetFamilyActions.loadDatasetFamilyList),
             concatLatestFrom(() => this.store.select(instanceSelector.selectInstanceNameByRoute)),
-            mergeMap(([action, instanceName]) => this.datasetFamilyService.retrieveDatasetFamilyList(instanceName)
+            mergeMap(([, instanceName]) => this.datasetFamilyService.retrieveDatasetFamilyList(instanceName)
                 .pipe(
                     map(datasetFamilies => datasetFamilyActions.loadDatasetFamilyListSuccess({ datasetFamilies })),
                     catchError(() => of(datasetFamilyActions.loadDatasetFamilyListFail()))
@@ -52,8 +52,8 @@ export class DatasetFamilyEffects {
         this.actions$.pipe(
             ofType(datasetFamilyActions.addDatasetFamilySuccess),
             concatLatestFrom(() => this.store.select(instanceSelector.selectInstanceNameByRoute)),
-            tap(([action, instanceName]) => {
-                this.router.navigate(['/admin/configure-instance/' + instanceName]);
+            tap(([, instanceName]) => {
+                this.router.navigate([`/admin/configure-instance/${instanceName}`]);
                 this.toastr.success('Dataset family successfully added', 'The new dataset family was added into the database')
             })
         ), { dispatch: false}
@@ -83,7 +83,7 @@ export class DatasetFamilyEffects {
             ofType(datasetFamilyActions.editDatasetFamilySuccess),
             concatLatestFrom(() => this.store.select(instanceSelector.selectInstanceNameByRoute)),
             tap(([action, instanceName]) => {
-                this.router.navigate(['/admin/configure-instance/' + instanceName]);
+                this.router.navigate([`/admin/configure-instance/${instanceName}`]);
                 this.toastr.success('Dataset family successfully edited', 'The existing dataset family has been edited into the database')
             })
         ), { dispatch: false}
diff --git a/client/src/app/metamodel/effects/dataset.effects.ts b/client/src/app/metamodel/effects/dataset.effects.ts
index aa481c990199a595c96c254b3583e16374358ccb..cf0a0e3fee30c9f2b1179ee4993af68ed3e350c0 100644
--- a/client/src/app/metamodel/effects/dataset.effects.ts
+++ b/client/src/app/metamodel/effects/dataset.effects.ts
@@ -26,7 +26,7 @@ export class DatasetEffects {
         this.actions$.pipe(
             ofType(datasetActions.loadDatasetList),
             concatLatestFrom(() => this.store.select(instanceSelector.selectInstanceNameByRoute)),
-            mergeMap(([action, instanceName]) => this.datasetService.retrieveDatasetList(instanceName)
+            mergeMap(([, instanceName]) => this.datasetService.retrieveDatasetList(instanceName)
                 .pipe(
                     map(datasets => datasetActions.loadDatasetListSuccess({ datasets })),
                     catchError(() => of(datasetActions.loadDatasetListFail()))
@@ -51,8 +51,8 @@ export class DatasetEffects {
         this.actions$.pipe(
             ofType(datasetActions.addDatasetSuccess),
             concatLatestFrom(() => this.store.select(instanceSelector.selectInstanceNameByRoute)),
-            tap(([action, instanceName]) => {
-                this.router.navigate(['/admin/configure-instance/' + instanceName]);
+            tap(([, instanceName]) => {
+                this.router.navigate([`/admin/instance/configure-instance/${instanceName}`]);
                 this.toastr.success('Dataset successfully added', 'The new dataset was added into the database')
             })
         ), { dispatch: false}
@@ -81,8 +81,8 @@ export class DatasetEffects {
         this.actions$.pipe(
             ofType(datasetActions.editDatasetSuccess),
             concatLatestFrom(() => this.store.select(instanceSelector.selectInstanceNameByRoute)),
-            tap(([action, instanceName]) => {
-                this.router.navigate(['/admin/configure-instance/' + instanceName]);
+            tap(([, instanceName]) => {
+                this.router.navigate([`/admin/instance/configure-instance/${instanceName}`]);
                 this.toastr.success('Dataset successfully edited', 'The existing dataset has been edited into the database')
             })
         ), { dispatch: false}
diff --git a/client/src/app/metamodel/effects/group.effects.ts b/client/src/app/metamodel/effects/group.effects.ts
index 57a01156deb5326f3f08fe450e4cb2c62e9cb136..6f3567afd9e0a71550dfba4713df71b5cf69a80d 100644
--- a/client/src/app/metamodel/effects/group.effects.ts
+++ b/client/src/app/metamodel/effects/group.effects.ts
@@ -26,7 +26,7 @@ export class GroupEffects {
         this.actions$.pipe(
             ofType(groupActions.loadGroupList),
             concatLatestFrom(() => this.store.select(instanceSelector.selectInstanceNameByRoute)),
-            mergeMap(([action, instanceName]) => this.groupService.retrieveGroupList(instanceName)
+            mergeMap(([, instanceName]) => this.groupService.retrieveGroupList(instanceName)
                 .pipe(
                     map(groups => groupActions.loadGroupListSuccess({ groups })),
                     catchError(() => of(groupActions.loadGroupListFail()))
@@ -52,8 +52,8 @@ export class GroupEffects {
         this.actions$.pipe(
             ofType(groupActions.addGroupSuccess),
             concatLatestFrom(() => this.store.select(instanceSelector.selectInstanceNameByRoute)),
-            tap(([action, instanceName]) => {
-                this.router.navigateByUrl('/admin/configure-instance/' + instanceName + '/group');
+            tap(([, instanceName]) => {
+                this.router.navigateByUrl(`/admin/instance/configure-instance/${instanceName}/group`);
                 this.toastr.success('Group successfully added', 'The new group was added into the database')
             })
         ), { dispatch: false}
@@ -82,8 +82,8 @@ export class GroupEffects {
         this.actions$.pipe(
             ofType(groupActions.editGroupSuccess),
             concatLatestFrom(() => this.store.select(instanceSelector.selectInstanceNameByRoute)),
-            tap(([action, instanceName]) => {
-                this.router.navigateByUrl('/admin/configure-instance/' + instanceName + '/group');
+            tap(([, instanceName]) => {
+                this.router.navigateByUrl(`/admin/instance/configure-instance/${instanceName}/group`);
                 this.toastr.success('Group successfully edited', 'The existing group has been edited into the database')
             })
         ), { dispatch: false}
diff --git a/client/src/app/metamodel/effects/instance.effects.ts b/client/src/app/metamodel/effects/instance.effects.ts
index be40abbb084cc1f214380af8e7b63d19ff12ce5f..e83fb1e3c4f9a20154ea09706061d30893876905 100644
--- a/client/src/app/metamodel/effects/instance.effects.ts
+++ b/client/src/app/metamodel/effects/instance.effects.ts
@@ -48,7 +48,7 @@ export class InstanceEffects {
         this.actions$.pipe(
             ofType(instanceActions.addInstanceSuccess),
             tap(() => {
-                this.router.navigate(['/admin/instance-list']);
+                this.router.navigate(['/admin/instance/instance-list']);
                 this.toastr.success('Instance successfully added', 'The new instance was added into the database')
             })
         ), { dispatch: false}
@@ -77,7 +77,7 @@ export class InstanceEffects {
         this.actions$.pipe(
             ofType(instanceActions.editInstanceSuccess),
             tap(() => {
-                this.router.navigate(['/admin/instance-list']);
+                this.router.navigate(['/admin/instance/instance-list']);
                 this.toastr.success('Instance successfully edited', 'The existing instance has been edited into the database')
             })
         ), { dispatch: false}
diff --git a/client/src/app/metamodel/effects/output-category.effects.ts b/client/src/app/metamodel/effects/output-category.effects.ts
index 7cb12c7518dfde2aa0d7048a81ba832f2b1f7a1e..a785cc0879b1958996de1cca8d3427d8b31afd4f 100644
--- a/client/src/app/metamodel/effects/output-category.effects.ts
+++ b/client/src/app/metamodel/effects/output-category.effects.ts
@@ -25,7 +25,7 @@ export class OutputCategoryEffects {
         this.actions$.pipe(
             ofType(outputCategoryActions.loadOutputCategoryList),
             concatLatestFrom(() => this.store.select(datasetSelector.selectDatasetNameByRoute)),
-            mergeMap(([action, datasetName]) => this.outputCategoryService.retrieveOutputCategoryList(datasetName)
+            mergeMap(([, datasetName]) => this.outputCategoryService.retrieveOutputCategoryList(datasetName)
                 .pipe(
                     map(outputCategories => outputCategoryActions.loadOutputCategoryListSuccess({ outputCategories })),
                     catchError(() => of(outputCategoryActions.loadOutputCategoryListFail()))
diff --git a/client/src/app/metamodel/effects/output-family.effects.ts b/client/src/app/metamodel/effects/output-family.effects.ts
index 079ad4f6b35eb480b81db124b3f94c5c19305dfe..fe65f5d7c92808a43c095dbbbf3fb468050d4813 100644
--- a/client/src/app/metamodel/effects/output-family.effects.ts
+++ b/client/src/app/metamodel/effects/output-family.effects.ts
@@ -25,7 +25,7 @@ export class OutputFamilyEffects {
         this.actions$.pipe(
             ofType(outputFamilyActions.loadOutputFamilyList),
             concatLatestFrom(() => this.store.select(datasetSelector.selectDatasetNameByRoute)),
-            mergeMap(([action, datasetName]) => this.outputFamilyService.retrieveOutputFamilyList(datasetName)
+            mergeMap(([, datasetName]) => this.outputFamilyService.retrieveOutputFamilyList(datasetName)
                 .pipe(
                     map(outputFamilies => outputFamilyActions.loadOutputFamilyListSuccess({ outputFamilies })),
                     catchError(() => of(outputFamilyActions.loadOutputFamilyListFail()))
diff --git a/client/src/app/metamodel/effects/survey.effects.ts b/client/src/app/metamodel/effects/survey.effects.ts
index fae21756b32a5bee17d13544db6304a07707e25b..7d876b5ac2fa0d0f8d87b9b13483e732daddbd76 100644
--- a/client/src/app/metamodel/effects/survey.effects.ts
+++ b/client/src/app/metamodel/effects/survey.effects.ts
@@ -48,7 +48,7 @@ export class SurveyEffects {
         this.actions$.pipe(
             ofType(surveyActions.addSurveySuccess),
             tap(() => {
-                this.router.navigate(['/admin/survey-list']);
+                this.router.navigate(['/admin/survey/survey-list']);
                 this.toastr.success('Survey successfully added', 'The new survey was added into the database')
             })
         ), { dispatch: false}
@@ -77,7 +77,7 @@ export class SurveyEffects {
         this.actions$.pipe(
             ofType(surveyActions.editSurveySuccess),
             tap(() => {
-                this.router.navigate(['/admin/survey-list']);
+                this.router.navigate(['/admin/survey/survey-list']);
                 this.toastr.success('Survey successfully edited', 'The existing survey has been edited into the database')
             })
         ), { dispatch: false}
diff --git a/client/src/app/metamodel/services/attribute-distinct.service.ts b/client/src/app/metamodel/services/attribute-distinct.service.ts
index e5466159309a507362dfe260e8f33073516a4fd5..8051c13d5d362582e287787db0130146779d9a82 100644
--- a/client/src/app/metamodel/services/attribute-distinct.service.ts
+++ b/client/src/app/metamodel/services/attribute-distinct.service.ts
@@ -20,6 +20,6 @@ export class AttributeDistinctService {
     constructor(private http: HttpClient, private config: AppConfigService) { }
 
     retrieveAttributeDistinctList(datasetName: string, attribute: Attribute): Observable<string[]> {
-        return this.http.get<string[]>(this.config.apiUrl + '/dataset/' + datasetName + '/attribute/' + attribute.id + '/distinct');
+        return this.http.get<string[]>(`${this.config.apiUrl}/dataset/${datasetName}/attribute/${attribute.id}/distinct`);
     }
 }
diff --git a/client/src/app/metamodel/services/attribute.service.ts b/client/src/app/metamodel/services/attribute.service.ts
index 9c2583c71f1c1af80bda0ad53daa8c9402ff11fc..50fa14d9126f081f891caae53ad5b02da1ea0827 100644
--- a/client/src/app/metamodel/services/attribute.service.ts
+++ b/client/src/app/metamodel/services/attribute.service.ts
@@ -20,18 +20,18 @@ export class AttributeService {
     constructor(private http: HttpClient, private config: AppConfigService) { }
 
     retrieveAttributeList(datasetName: string): Observable<Attribute[]> {
-        return this.http.get<Attribute[]>(this.config.apiUrl + '/dataset/' + datasetName + '/attribute');
+        return this.http.get<Attribute[]>(`${this.config.apiUrl}/dataset/${datasetName}/attribute`);
     }
 
     addAttribute(datasetName: string, attribute: Attribute): Observable<Attribute> {
-        return this.http.post<Attribute>(this.config.apiUrl + '/dataset/' + datasetName + '/attribute', attribute);
+        return this.http.post<Attribute>(`${this.config.apiUrl}/dataset/${datasetName}/attribute`, attribute);
     }
 
     editAttribute(datasetName: string, attribute: Attribute): Observable<Attribute> {
-        return this.http.put<Attribute>(this.config.apiUrl + '/dataset/' + datasetName + '/attribute/' + attribute.id, attribute);
+        return this.http.put<Attribute>(`${this.config.apiUrl}/dataset/${datasetName}/attribute/${attribute.id}`, attribute);
     }
 
     deleteAttribute(datasetName: string, attribute: Attribute) {
-        return this.http.delete(this.config.apiUrl + '/dataset/' + datasetName + '/attribute/' + attribute.id); 
+        return this.http.delete(`${this.config.apiUrl}/dataset/${datasetName}/attribute/${attribute.id}`); 
     }
 }
diff --git a/client/src/app/metamodel/services/column.service.ts b/client/src/app/metamodel/services/column.service.ts
index 0da2af5345283d3374916e1fc40b4bc4cd9ef2cd..16b51ddc6e00e112ebf754ee128deea6abfdb300 100644
--- a/client/src/app/metamodel/services/column.service.ts
+++ b/client/src/app/metamodel/services/column.service.ts
@@ -20,6 +20,6 @@ export class ColumnService {
     constructor(private http: HttpClient, private config: AppConfigService) { }
 
     retrieveColumns(datasetName: string): Observable<Column[]> {
-        return this.http.get<Column[]>(this.config.apiUrl + '/dataset/' + datasetName + '/column');
+        return this.http.get<Column[]>(`${this.config.apiUrl}/dataset/${datasetName}/column`);
     }
 }
diff --git a/client/src/app/metamodel/services/criteria-family.service.ts b/client/src/app/metamodel/services/criteria-family.service.ts
index 09d6dd21a477f150f8de5f5fe0a6796e0860966f..ece1eea2fad401567e6250b4f4a522478b7946bf 100644
--- a/client/src/app/metamodel/services/criteria-family.service.ts
+++ b/client/src/app/metamodel/services/criteria-family.service.ts
@@ -20,18 +20,18 @@ export class CriteriaFamilyService {
     constructor(private http: HttpClient, private config: AppConfigService) { }
 
     retrieveCriteriaFamilyList(datasetName: string): Observable<CriteriaFamily[]> {
-        return this.http.get<CriteriaFamily[]>(this.config.apiUrl + '/dataset/' + datasetName + '/criteria-family');
+        return this.http.get<CriteriaFamily[]>(`${this.config.apiUrl}/dataset/${datasetName}/criteria-family`);
     }
 
     addCriteriaFamily(datasetName: string, newCriteriaFamily: CriteriaFamily): Observable<CriteriaFamily> {
-        return this.http.post<CriteriaFamily>(this.config.apiUrl + '/dataset/' + datasetName + '/criteria-family', newCriteriaFamily);
+        return this.http.post<CriteriaFamily>(`${this.config.apiUrl}/dataset/${datasetName}/criteria-family`, newCriteriaFamily);
     }
 
     editCriteriaFamily(criteriaFamily: CriteriaFamily): Observable<CriteriaFamily> {
-        return this.http.put<CriteriaFamily>(this.config.apiUrl + '/criteria-family/' + criteriaFamily.id, criteriaFamily);
+        return this.http.put<CriteriaFamily>(`${this.config.apiUrl}/criteria-family/${criteriaFamily.id}`, criteriaFamily);
     }
 
     deleteCriteriaFamily(criteriaFamilyId: number) {
-        return this.http.delete(this.config.apiUrl + '/criteria-family/' + criteriaFamilyId);
+        return this.http.delete(`${this.config.apiUrl}/criteria-family/${criteriaFamilyId}`);
     }
 }
diff --git a/client/src/app/metamodel/services/database.service.ts b/client/src/app/metamodel/services/database.service.ts
index c569d351670179e73ccf3067dafa12bfdd6628e3..b24141715e62930397ffd247013af15c712bda86 100644
--- a/client/src/app/metamodel/services/database.service.ts
+++ b/client/src/app/metamodel/services/database.service.ts
@@ -20,18 +20,18 @@ export class DatabaseService {
     constructor(private http: HttpClient, private config: AppConfigService) { }
 
     retrieveDatabaseList(): Observable<Database[]> {
-        return this.http.get<Database[]>(this.config.apiUrl + '/database');
+        return this.http.get<Database[]>(`${this.config.apiUrl}/database`);
     }
 
     addDatabase(newDatabase: Database): Observable<Database> {
-        return this.http.post<Database>(this.config.apiUrl + '/database', newDatabase);
+        return this.http.post<Database>(`${this.config.apiUrl}/database`, newDatabase);
     }
 
     editDatabase(database: Database): Observable<Database> {
-        return this.http.put<Database>(this.config.apiUrl + '/database/' + database.id, database);
+        return this.http.put<Database>(`${this.config.apiUrl}/database/${database.id}`, database);
     }
 
     deleteDatabase(databaseId: number) {
-        return this.http.delete(this.config.apiUrl + '/database/' + databaseId);
+        return this.http.delete(`${this.config.apiUrl}/database/${databaseId}`);
     }
 }
diff --git a/client/src/app/metamodel/services/dataset-family.service.ts b/client/src/app/metamodel/services/dataset-family.service.ts
index 96fc34460b1c5520a754f5f1afb9edafcde8d821..c7385f9c19b0723aba38d22f2dd42a9fa6356d36 100644
--- a/client/src/app/metamodel/services/dataset-family.service.ts
+++ b/client/src/app/metamodel/services/dataset-family.service.ts
@@ -20,18 +20,18 @@ export class DatasetFamilyService {
     constructor(private http: HttpClient, private config: AppConfigService) { }
 
     retrieveDatasetFamilyList(instanceName: string): Observable<DatasetFamily[]> {
-        return this.http.get<DatasetFamily[]>(this.config.apiUrl + '/instance/' + instanceName + '/dataset-family');
+        return this.http.get<DatasetFamily[]>(`${this.config.apiUrl}/instance/${instanceName}/dataset-family`);
     }
 
     addDatasetFamily(instanceName: string, newDatasetFamily: DatasetFamily): Observable<DatasetFamily> {
-        return this.http.post<DatasetFamily>(this.config.apiUrl + '/instance/' + instanceName + '/dataset-family', newDatasetFamily);
+        return this.http.post<DatasetFamily>(`${this.config.apiUrl}/instance/${instanceName}/dataset-family`, newDatasetFamily);
     }
 
     editDatasetFamily(datasetFamily: DatasetFamily): Observable<DatasetFamily> {
-        return this.http.put<DatasetFamily>(this.config.apiUrl + '/dataset-family/' + datasetFamily.id, datasetFamily);
+        return this.http.put<DatasetFamily>(`${this.config.apiUrl}/dataset-family/${datasetFamily.id}`, datasetFamily);
     }
 
     deleteDatasetFamily(datasetFamilyId: number) {
-        return this.http.delete(this.config.apiUrl + '/dataset-family/' + datasetFamilyId);
+        return this.http.delete(`${this.config.apiUrl}/dataset-family/${datasetFamilyId}`);
     }
 }
diff --git a/client/src/app/metamodel/services/dataset.service.ts b/client/src/app/metamodel/services/dataset.service.ts
index e8109448278f7e10f9e0f486eb25513c988c3265..312749da555701cecd5cdc0ff085b87fcec47f02 100644
--- a/client/src/app/metamodel/services/dataset.service.ts
+++ b/client/src/app/metamodel/services/dataset.service.ts
@@ -20,18 +20,18 @@ export class DatasetService {
     constructor(private http: HttpClient, private config: AppConfigService) { }
 
     retrieveDatasetList(instanceName: string): Observable<Dataset[]> {
-        return this.http.get<Dataset[]>(this.config.apiUrl + '/instance/' + instanceName + '/dataset');
+        return this.http.get<Dataset[]>(`${this.config.apiUrl}/instance/${instanceName}/dataset`);
     }
 
     addDataset(newDataset: Dataset): Observable<Dataset> {
-        return this.http.post<Dataset>(this.config.apiUrl + '/dataset-family/' + newDataset.id_dataset_family + '/dataset', newDataset);
+        return this.http.post<Dataset>(`${this.config.apiUrl}/dataset-family/${newDataset.id_dataset_family}/dataset`, newDataset);
     }
 
     editDataset(dataset: Dataset): Observable<Dataset> {
-        return this.http.put<Dataset>(this.config.apiUrl + '/dataset/' + dataset.name, dataset);
+        return this.http.put<Dataset>(`${this.config.apiUrl}/dataset/${dataset.name}`, dataset);
     }
 
     deleteDataset(datasetName: string) {
-        return this.http.delete(this.config.apiUrl + '/dataset/' + datasetName);
+        return this.http.delete(`${this.config.apiUrl}/dataset/${datasetName}`);
     }
 }
diff --git a/client/src/app/metamodel/services/group.service.ts b/client/src/app/metamodel/services/group.service.ts
index b83489bebbbc04d63fcbfb237ef359266bd27348..a96ed07797d2d97642a3bf2d4f063e9574d4646d 100644
--- a/client/src/app/metamodel/services/group.service.ts
+++ b/client/src/app/metamodel/services/group.service.ts
@@ -20,18 +20,18 @@ export class GroupService {
     constructor(private http: HttpClient, private config: AppConfigService) { }
 
     retrieveGroupList(instanceName: string): Observable<Group[]> {
-        return this.http.get<Group[]>(this.config.apiUrl + '/instance/' + instanceName +  '/group');
+        return this.http.get<Group[]>(`${this.config.apiUrl}/instance/${instanceName}/group`);
     }
 
     addGroup(instanceName: string, newGroup: Group): Observable<Group> {
-        return this.http.post<Group>(this.config.apiUrl + '/instance/' + instanceName + '/group', newGroup);
+        return this.http.post<Group>(`${this.config.apiUrl}/instance/${instanceName}/group`, newGroup);
     }
 
     editGroup(group: Group): Observable<Group> {
-        return this.http.put<Group>(this.config.apiUrl + '/group/' + group.id, group);
+        return this.http.put<Group>(`${this.config.apiUrl}/group/${group.id}`, group);
     }
 
     deleteGroup(groupId: number) {
-        return this.http.delete(this.config.apiUrl + '/group/' + groupId);
+        return this.http.delete(`${this.config.apiUrl}/group/${groupId}`);
     }
 }
diff --git a/client/src/app/metamodel/services/instance.service.ts b/client/src/app/metamodel/services/instance.service.ts
index d90f7f157acc9051687bd93469a49c46f9aa6e7f..e67e479cdf188d46ef320f469febcecc55cf1433 100644
--- a/client/src/app/metamodel/services/instance.service.ts
+++ b/client/src/app/metamodel/services/instance.service.ts
@@ -20,18 +20,18 @@ export class InstanceService {
     constructor(private http: HttpClient, private config: AppConfigService) { }
 
     retrieveInstanceList(): Observable<Instance[]> {
-        return this.http.get<Instance[]>(this.config.apiUrl + '/instance');
+        return this.http.get<Instance[]>(`${this.config.apiUrl}/instance`);
     }
 
     addInstance(newInstance: Instance): Observable<Instance> {
-        return this.http.post<Instance>(this.config.apiUrl + '/instance', newInstance);
+        return this.http.post<Instance>(`${this.config.apiUrl}/instance`, newInstance);
     }
 
     editInstance(instance: Instance): Observable<Instance> {
-        return this.http.put<Instance>(this.config.apiUrl + '/instance/' + instance.name, instance);
+        return this.http.put<Instance>(`${this.config.apiUrl}/instance/${instance.name}`, instance);
     }
 
     deleteInstance(instanceName: string) {
-        return this.http.delete(this.config.apiUrl + '/instance/' + instanceName);
+        return this.http.delete(`${this.config.apiUrl}/instance/${instanceName}`);
     }
 }
diff --git a/client/src/app/metamodel/services/output-category.service.ts b/client/src/app/metamodel/services/output-category.service.ts
index 5cc3e49dbd165c348df8dc60b7389b4592ff4e45..b13ef00fdb66caecacd3a7d25c428dd263164227 100644
--- a/client/src/app/metamodel/services/output-category.service.ts
+++ b/client/src/app/metamodel/services/output-category.service.ts
@@ -20,18 +20,18 @@ export class OutputCategoryService {
     constructor(private http: HttpClient, private config: AppConfigService) { }
 
     retrieveOutputCategoryList(datasetName: string): Observable<OutputCategory[]> {
-        return this.http.get<OutputCategory[]>(this.config.apiUrl + '/dataset/' + datasetName + '/output-category');
+        return this.http.get<OutputCategory[]>(`${this.config.apiUrl}/dataset/${datasetName}/output-category`);
     }
 
     addOutputCategory(newOutputCategory: OutputCategory): Observable<OutputCategory> {
-        return this.http.post<OutputCategory>(this.config.apiUrl + '/output-family/' + newOutputCategory.id_output_family + '/output-category', newOutputCategory);
+        return this.http.post<OutputCategory>(`${this.config.apiUrl}/output-family/${newOutputCategory.id_output_family}/output-category`, newOutputCategory);
     }
 
     editOutputCategory(outputCategory: OutputCategory): Observable<OutputCategory> {
-        return this.http.put<OutputCategory>(this.config.apiUrl + '/output-category/' + outputCategory.id, outputCategory);
+        return this.http.put<OutputCategory>(`${this.config.apiUrl}/output-category/${outputCategory.id}`, outputCategory);
     }
 
     deleteOutputCategory(outputCategoryId: number) {
-        return this.http.delete(this.config.apiUrl + '/output-category/' + outputCategoryId);
+        return this.http.delete(`${this.config.apiUrl}/output-category/${outputCategoryId}`);
     }
 }
diff --git a/client/src/app/metamodel/services/output-family.service.ts b/client/src/app/metamodel/services/output-family.service.ts
index 825e191902bac95960727424fdbe483c9f9d1a5a..5c73604aa1b9706f3beb798620ef69a2c95c73c8 100644
--- a/client/src/app/metamodel/services/output-family.service.ts
+++ b/client/src/app/metamodel/services/output-family.service.ts
@@ -20,18 +20,18 @@ export class OutputFamilyService {
     constructor(private http: HttpClient, private config: AppConfigService) { }
 
     retrieveOutputFamilyList(datasetName: string): Observable<OutputFamily[]> {
-        return this.http.get<OutputFamily[]>(this.config.apiUrl + '/dataset/' + datasetName + '/output-family');
+        return this.http.get<OutputFamily[]>(`${this.config.apiUrl}/dataset/${datasetName}/output-family`);
     }
 
     addOutputFamily(datasetName: string, newOutputFamily: OutputFamily): Observable<OutputFamily> {
-        return this.http.post<OutputFamily>(this.config.apiUrl + '/dataset/' + datasetName + '/output-family', newOutputFamily);
+        return this.http.post<OutputFamily>(`${this.config.apiUrl}/dataset/${datasetName}/output-family`, newOutputFamily);
     }
 
     editOutputFamily(criteriaFamily: OutputFamily): Observable<OutputFamily> {
-        return this.http.put<OutputFamily>(this.config.apiUrl + '/output-family/' + criteriaFamily.id, criteriaFamily);
+        return this.http.put<OutputFamily>(`${this.config.apiUrl}/output-family/${criteriaFamily.id}`, criteriaFamily);
     }
 
     deleteOutputFamily(outputFamilyId: number) {
-        return this.http.delete(this.config.apiUrl + '/output-family/' + outputFamilyId);
+        return this.http.delete(`${this.config.apiUrl}/output-family/${outputFamilyId}`);
     }
 }
diff --git a/client/src/app/metamodel/services/root-directory.service.ts b/client/src/app/metamodel/services/root-directory.service.ts
index 56da1e927f274fa55c0195dd792b2ddfcf3a7a5e..7935a76d4e87f55e97e5400f86e067b86dc81b47 100644
--- a/client/src/app/metamodel/services/root-directory.service.ts
+++ b/client/src/app/metamodel/services/root-directory.service.ts
@@ -20,6 +20,6 @@ export class RootDirectoryService {
     constructor(private http: HttpClient, private config: AppConfigService) { }
 
     retrieveRootDirectory(path: string): Observable<FileInfo[]> {
-        return this.http.get<FileInfo[]>(this.config.apiUrl + '/file-explorer' + path);
+        return this.http.get<FileInfo[]>(`${this.config.apiUrl}/file-explorer${path}`);
     }
 }
diff --git a/client/src/app/metamodel/services/select-option.service.ts b/client/src/app/metamodel/services/select-option.service.ts
index e18a0dd35e8b55fce4006525e6705909ec208881..719b902128db274dd66729fd83e8efeaa52238fb 100644
--- a/client/src/app/metamodel/services/select-option.service.ts
+++ b/client/src/app/metamodel/services/select-option.service.ts
@@ -20,18 +20,18 @@ export class SelectOptionService {
     constructor(private http: HttpClient, private config: AppConfigService) { }
 
     retrieveSelectOptionList(): Observable<SelectOption[]> {
-        return this.http.get<SelectOption[]>(this.config.apiUrl + '/option');
+        return this.http.get<SelectOption[]>(`${this.config.apiUrl}/option`);
     }
 
     addSelectOption(settingsSelectOption: SelectOption): Observable<SelectOption> {
-        return this.http.post<SelectOption>(this.config.apiUrl + '/option', settingsSelectOption);
+        return this.http.post<SelectOption>(`${this.config.apiUrl}/option`, settingsSelectOption);
     }
 
     editSelectOption(settingsSelectOption: SelectOption): Observable<SelectOption> {
-        return this.http.put<SelectOption>(this.config.apiUrl + '/option/' + settingsSelectOption.id, settingsSelectOption);
+        return this.http.put<SelectOption>(`${this.config.apiUrl}/option/${settingsSelectOption.id}`, settingsSelectOption);
     }
 
     deleteSelectOption(id: number) {
-        return this.http.delete(this.config.apiUrl + '/option/' + id);
+        return this.http.delete(`${this.config.apiUrl}/option/${id}`);
     }
 }
diff --git a/client/src/app/metamodel/services/select.service.ts b/client/src/app/metamodel/services/select.service.ts
index b146a874930054099765f9939310be7be1ab7c6b..f1e440f8f6c87cfd6acb41c370b2407d3ecbac4e 100644
--- a/client/src/app/metamodel/services/select.service.ts
+++ b/client/src/app/metamodel/services/select.service.ts
@@ -20,18 +20,18 @@ export class SelectService {
     constructor(private http: HttpClient, private config: AppConfigService) { }
 
     retrieveSelectList(): Observable<Select[]> {
-        return this.http.get<Select[]>(this.config.apiUrl + '/select');
+        return this.http.get<Select[]>(`${this.config.apiUrl}/select`);
     }
 
     addSelect(select: Select): Observable<Select> {
-        return this.http.post<Select>(this.config.apiUrl + '/select', select);
+        return this.http.post<Select>(`${this.config.apiUrl}/select`, select);
     }
 
     editSelect(select: Select): Observable<Select> {
-        return this.http.put<Select>(this.config.apiUrl + '/select/' + select.name, select);
+        return this.http.put<Select>(`${this.config.apiUrl}/select/${select.name}`, select);
     }
 
     deleteSelect(name: string) {
-        return this.http.delete(this.config.apiUrl + '/select/' + name);
+        return this.http.delete(`${this.config.apiUrl}/select/${name}`);
     }
 }
diff --git a/client/src/app/metamodel/services/survey.service.ts b/client/src/app/metamodel/services/survey.service.ts
index faf0c1ea4d6eff2c1d72c60f2fcf551b81f843bd..d4fdd6e3d294f76786a64dd9a3be5e01e6153131 100644
--- a/client/src/app/metamodel/services/survey.service.ts
+++ b/client/src/app/metamodel/services/survey.service.ts
@@ -20,18 +20,18 @@ export class SurveyService {
     constructor(private http: HttpClient, private config: AppConfigService) { }
 
     retrieveSurveyList(): Observable<Survey[]> {
-        return this.http.get<Survey[]>(this.config.apiUrl + '/survey');
+        return this.http.get<Survey[]>(`${this.config.apiUrl}/survey`);
     }
 
     addSurvey(newSurvey: Survey): Observable<Survey> {
-        return this.http.post<Survey>(this.config.apiUrl + '/survey', newSurvey);
+        return this.http.post<Survey>(`${this.config.apiUrl}/survey`, newSurvey);
     }
 
     editSurvey(survey: Survey): Observable<Survey> {
-        return this.http.put<Survey>(this.config.apiUrl + '/survey/' + survey.name, survey);
+        return this.http.put<Survey>(`${this.config.apiUrl}/survey/${survey.name}`, survey);
     }
 
     deleteSurvey(surveyName: string) {
-        return this.http.delete(this.config.apiUrl + '/survey/' + surveyName);
+        return this.http.delete(`${this.config.apiUrl}/survey/${surveyName}`);
     }
 }
diff --git a/client/src/app/metamodel/services/table.service.ts b/client/src/app/metamodel/services/table.service.ts
index 3a3722b7f515825255cc08de75447101e4f65e5a..2d67e4a1860d21975117bcbcdb99f52401925e4a 100644
--- a/client/src/app/metamodel/services/table.service.ts
+++ b/client/src/app/metamodel/services/table.service.ts
@@ -19,6 +19,6 @@ export class TableService {
     constructor(private http: HttpClient, private config: AppConfigService) { }
 
     retrieveTableList(idDatabase: number): Observable<string[]> {
-        return this.http.get<string[]>(this.config.apiUrl + '/database/' + idDatabase + '/table');
+        return this.http.get<string[]>(`${this.config.apiUrl}/database/${idDatabase}/table`);
     }
 }
diff --git a/client/src/app/shared/shared.module.ts b/client/src/app/shared/shared.module.ts
index 4a68bd0d8d84a6118dfd4b7f0b13a6059ba385b9..ef7580ab68e55a3d8f64d4b264ccb607a1bcfc79 100644
--- a/client/src/app/shared/shared.module.ts
+++ b/client/src/app/shared/shared.module.ts
@@ -12,7 +12,6 @@ import { CommonModule } from '@angular/common';
 import { RouterModule } from '@angular/router';
 import { FormsModule, ReactiveFormsModule } from '@angular/forms';
 
-import { CollapseModule } from 'ngx-bootstrap/collapse';
 import { BsDropdownModule } from 'ngx-bootstrap/dropdown';
 import { ModalModule } from 'ngx-bootstrap/modal';
 import { AccordionModule } from 'ngx-bootstrap/accordion';
@@ -37,7 +36,6 @@ import { sharedPipes } from './pipes';
         RouterModule,
         FormsModule,
         ReactiveFormsModule,
-        CollapseModule.forRoot(),
         BsDropdownModule.forRoot(),
         ModalModule.forRoot(),
         AccordionModule.forRoot(),
@@ -53,8 +51,6 @@ import { sharedPipes } from './pipes';
         CommonModule,
         FormsModule,
         ReactiveFormsModule,
-        CollapseModule,
-        BsDropdownModule,
         ModalModule,
         AccordionModule,
         PopoverModule,
diff --git a/client/src/app/shared/utils.ts b/client/src/app/shared/utils.ts
index 0e013d5cbd0261e3736bc45b9b3e6288846901a8..c679257436292a3ea0ee8b1ceca31ad555ce6b47 100644
--- a/client/src/app/shared/utils.ts
+++ b/client/src/app/shared/utils.ts
@@ -4,12 +4,12 @@
  * @return string
  *
  * @example
- * const url: string = getHost() + '/following-url/';
+ * const url: string = `${getHost()}/following-url/`;
  */
 export const getHost = (apiUrl: string): string => {
     if (!apiUrl.startsWith('http')) {
         const url = window.location;
-        return url.protocol + '//' + url.host + document.getElementsByTagName('base')[0].getAttribute('href') + apiUrl;
+        return `${url.protocol}//${url.host}${document.getElementsByTagName('base')[0].getAttribute('href')}${apiUrl}`;
     }
     return apiUrl;
 }
diff --git a/services/requirements.txt b/services/requirements.txt
index 3feb0f5ed88b1bd36d2c1a48dc5cff2800b7ff84..5e563c168233c9989156156f5ca6fcdf3534fb31 100755
--- a/services/requirements.txt
+++ b/services/requirements.txt
@@ -1,6 +1,6 @@
 numpy
 pytest
-astropy
+astropy==4.3.1
 aplpy
 flask
 flask-cors