diff --git a/src/frontend/app/app.module.ts b/src/frontend/app/app.module.ts
index bca4997872bf831480179ba3a63729e461027b58..37e2b5d2f6775dbfe138e2060f8fe977d9587392 100755
--- a/src/frontend/app/app.module.ts
+++ b/src/frontend/app/app.module.ts
@@ -123,7 +123,8 @@ import { DatabaseComponent } from './installer/database/database.component';
 import { DocserversComponent } from './installer/docservers/docservers.component';
 import { CustomizationComponent } from './installer/customization/customization.component';
 import { UseradminComponent } from './installer/useradmin/useradmin.component';
-import {RedirectIndexingModelComponent} from './administration/indexingModel/redirectIndexingModel/redirect-indexing-model.component';
+import { RedirectIndexingModelComponent } from './administration/indexingModel/redirectIndexingModel/redirect-indexing-model.component';
+import { InstallActionComponent } from './installer/install-action/install-action.component';
 
 
 
@@ -236,7 +237,8 @@ import {RedirectIndexingModelComponent} from './administration/indexingModel/red
         DocserversComponent,
         CustomizationComponent,
         UseradminComponent,
-        RedirectIndexingModelComponent
+        RedirectIndexingModelComponent,
+        InstallActionComponent
     ],
     entryComponents: [
         InfoChangePasswordModalComponent,
@@ -286,7 +288,8 @@ import {RedirectIndexingModelComponent} from './administration/indexingModel/red
         FolderCreateModalComponent,
         ReconcileActionComponent,
         ThesaurusModalComponent,
-        RedirectIndexingModelComponent
+        RedirectIndexingModelComponent,
+        InstallActionComponent
     ],
     providers: [FiltersListService, FoldersService, ActionsService, PrivilegeService],
     bootstrap: [AppComponent]
diff --git a/src/frontend/app/installer/customization/customization.component.html b/src/frontend/app/installer/customization/customization.component.html
index e6c00ebb7231e0761237a5c7929614306a092c60..dc08bb78a2de73601a52b04013b673341b0b9b56 100644
--- a/src/frontend/app/installer/customization/customization.component.html
+++ b/src/frontend/app/installer/customization/customization.component.html
@@ -4,6 +4,10 @@
         {{lang.stepCustomization_desc}}
     </div>
     <div class="col-md-6">
+        <mat-form-field appearance="outline">
+            <mat-label>{{lang.instanceName}}</mat-label>
+            <input matInput [(ngModel)]="customId">
+        </mat-form-field>
         <mat-form-field appearance="outline">
             <mat-label>{{lang.applicationName}}</mat-label>
             <input matInput [(ngModel)]="appName">
diff --git a/src/frontend/app/installer/customization/customization.component.ts b/src/frontend/app/installer/customization/customization.component.ts
index e3b1774fded51ff2864721c21af27d9b57bb861f..374efc484dcc87b5799278e7b3b2541def1948b3 100644
--- a/src/frontend/app/installer/customization/customization.component.ts
+++ b/src/frontend/app/installer/customization/customization.component.ts
@@ -2,7 +2,7 @@ import { Component, OnInit } from '@angular/core';
 import { FormBuilder, FormGroup, Validators } from '@angular/forms';
 import { NotificationService } from '../../notification.service';
 import { LANG } from '../../translate.component';
-
+import { StepAction } from '../types';
 
 declare var tinymce: any;
 
@@ -15,8 +15,7 @@ export class CustomizationComponent implements OnInit {
     lang: any = LANG;
     stepFormGroup: FormGroup;
 
-    docserversPath: string = '/opt/maaarch/docservers/';
-
+    customId: string = 'cs_maarchcourrier';
     appName: string = 'Maarch Courrier 20.10';
     loginMsg: string = '<span style="color:#24b0ed"><strong>Découvrez votre application via</strong></span>&nbsp;<a title="le guide de visite" href="https://docs.maarch.org/gitbook/html/MaarchCourrier/19.04/guu/home.html" target="_blank"><span style="color:#f99830;"><strong>le guide de visite en ligne</strong></span></a>';
     homeMsg: string = '<p>D&eacute;couvrez <strong>Maarch Courrier 20.10</strong> avec <a title="notre guide de visite" href="https://docs.maarch.org/" target="_blank"><span style="color:#f99830;"><strong>notre guide de visite en ligne</strong></span></a>.</p>';
@@ -83,4 +82,15 @@ export class CustomizationComponent implements OnInit {
         });
     }
 
+    getInfoToInstall(): StepAction[] {
+        return [{
+            body : {
+                customName: this.customId,
+            },
+            description : 'Initialisation de l\'instance',
+            route : '../rest/installer/custom',
+            installPriority : 1
+        }];
+    }
+
 }
diff --git a/src/frontend/app/installer/database/database.component.html b/src/frontend/app/installer/database/database.component.html
index c7dbac20cb0891dcac84171830f3d0cd42499139..f2ac0085f4ddf168271324b756f1aa2b531b03aa 100644
--- a/src/frontend/app/installer/database/database.component.html
+++ b/src/frontend/app/installer/database/database.component.html
@@ -14,7 +14,7 @@
         </mat-form-field>
         <mat-form-field appearance="outline">
             <mat-label>{{lang.user}}</mat-label>
-            <input matInput formControlName="dbLoginCtrl"  required>
+            <input matInput formControlName="dbLoginCtrl" required>
         </mat-form-field>
         <mat-form-field appearance="outline">
             <mat-label>{{lang.password}}</mat-label>
@@ -27,8 +27,16 @@
             <mat-label>{{lang.dbName}}</mat-label>
             <input matInput formControlName="dbNameCtrl" required>
         </mat-form-field>
+        <mat-form-field appearance="outline" floatLabel="never">
+            <mat-label>{{lang.dbSample}}</mat-label>
+            <mat-select formControlName="dbSampleCtrl">
+                <mat-option *ngFor="let sample of dataSamples" [value]="sample">
+                    {{sample}}
+                </mat-option>
+            </mat-select>
+        </mat-form-field>
         <div style="text-align:center;">
-            <button mat-raised-button type="button" color="primary" (click)="checkConnection()">
+            <button mat-raised-button type="button" color="primary" (click)="checkConnection()" [disabled]="isEmptyConnInfo()">
                 {{lang.checkInformations}}
             </button>
         </div>
diff --git a/src/frontend/app/installer/database/database.component.ts b/src/frontend/app/installer/database/database.component.ts
index 0eec37c4da2628d35b993fe6e30d0439504cd4d7..7d8751110ae639ed87ad4b74f82de7585d8326c1 100644
--- a/src/frontend/app/installer/database/database.component.ts
+++ b/src/frontend/app/installer/database/database.component.ts
@@ -6,6 +6,7 @@ import { tap } from 'rxjs/internal/operators/tap';
 import { catchError } from 'rxjs/internal/operators/catchError';
 import { of } from 'rxjs/internal/observable/of';
 import { LANG } from '../../translate.component';
+import { StepAction } from '../types';
 
 @Component({
     selector: 'app-database',
@@ -19,6 +20,11 @@ export class DatabaseComponent implements OnInit {
 
     connectionState: boolean = false;
 
+    dataSamples: string[] = [
+        'data_fr.sql',
+        'data_en.sql'
+    ];
+
     constructor(
         public http: HttpClient,
         private _formBuilder: FormBuilder,
@@ -30,6 +36,7 @@ export class DatabaseComponent implements OnInit {
             dbPortCtrl: ['5432', Validators.required],
             dbPasswordCtrl: ['', Validators.required],
             dbNameCtrl: ['', Validators.required],
+            dbSampleCtrl: ['data_fr.sql', Validators.required],
             stateStep: ['', Validators.required]
         });
     }
@@ -97,8 +104,32 @@ export class DatabaseComponent implements OnInit {
         return this.stepFormGroup === undefined ? false : this.stepFormGroup.valid;
     }
 
+    isEmptyConnInfo() {
+        return this.stepFormGroup.controls['dbHostCtrl'].invalid ||
+            this.stepFormGroup.controls['dbPortCtrl'].invalid ||
+            this.stepFormGroup.controls['dbLoginCtrl'].invalid ||
+            this.stepFormGroup.controls['dbPasswordCtrl'].invalid ||
+            this.stepFormGroup.controls['dbNameCtrl'].invalid;
+    }
+
     getFormGroup() {
         return this.stepFormGroup;
     }
 
+    getInfoToInstall(): StepAction[] {
+        return [{
+            body: {
+                server: this.stepFormGroup.controls['dbHostCtrl'].value,
+                port: this.stepFormGroup.controls['dbPortCtrl'].value,
+                user: this.stepFormGroup.controls['dbLoginCtrl'].value,
+                password: this.stepFormGroup.controls['dbPasswordCtrl'].value,
+                name: this.stepFormGroup.controls['dbNameCtrl'].value,
+                data: this.stepFormGroup.controls['dbSampleCtrl'].value
+            },
+            route: '../rest/installer/database',
+            description: this.lang.stepDatabaseActionDesc,
+            installPriority: 2
+        }];
+    }
+
 }
diff --git a/src/frontend/app/installer/docservers/docservers.component.ts b/src/frontend/app/installer/docservers/docservers.component.ts
index 1f959f8d73e2cde56b17e0f05fe820928fa83fa8..70237fd598464b1587ba85f1b547cfa75c1d10bc 100644
--- a/src/frontend/app/installer/docservers/docservers.component.ts
+++ b/src/frontend/app/installer/docservers/docservers.component.ts
@@ -45,4 +45,14 @@ export class DocserversComponent implements OnInit {
         this.notify.success(this.lang.rightInformations);
     }
 
+    getInfoToInstall(): any[] {
+        return [];
+        /*return {
+            body : {
+                appName: this.stepFormGroup.controls['docserversPath'].value,
+            },
+            route : '/installer/docservers'
+        };*/
+    }
+
 }
diff --git a/src/frontend/app/installer/install-action/install-action.component.html b/src/frontend/app/installer/install-action/install-action.component.html
new file mode 100644
index 0000000000000000000000000000000000000000..2a5b44dfde3b77f6247eeb8077855a66b8503c30
--- /dev/null
+++ b/src/frontend/app/installer/install-action/install-action.component.html
@@ -0,0 +1,21 @@
+<div class="mat-dialog-content-container">
+    <div mat-dialog-content>
+        <mat-list-item *ngFor="let step of steps">
+            <div mat-line class="step" [class.endStep]="step.state==='OK' || step.state==='KO'"
+                [class.currentStep]="step.state==='inProgress'">{{step.label}} <ng-container
+                    *ngIf="step.state==='inProgress'">...</ng-container>
+                <i *ngIf="step.state==='OK'" class="fa fa-check" style="color: green"></i>
+                <i *ngIf="step.state==='KO'" class="fa fa-times" style="color: red"></i>
+                <div *ngIf="step.msgErr!==''" class="alert-message alert-message-danger" role="alert" style="margin-top: 30px;min-width: 100%;">
+                    {{step.msgErr}}
+                </div>
+            </div>
+        </mat-list-item>
+    </div>
+    <ng-container *ngIf="isInstallComplete() && isInstallError()">
+        <span class="divider-modal"></span>
+        <div mat-dialog-actions class="actions">
+            <button mat-raised-button mat-button [disabled]="loading" [mat-dialog-close]="">{{lang.cancel}}</button>
+        </div>
+    </ng-container>
+</div>
\ No newline at end of file
diff --git a/src/frontend/app/installer/install-action/install-action.component.scss b/src/frontend/app/installer/install-action/install-action.component.scss
new file mode 100644
index 0000000000000000000000000000000000000000..d694d35462f41efcade5b41c956a6a24f9ba69a8
--- /dev/null
+++ b/src/frontend/app/installer/install-action/install-action.component.scss
@@ -0,0 +1,14 @@
+.step {
+    opacity: 0.5;
+    transition: all 0.2s;
+}
+
+.currentStep {
+    opacity: 1;
+    font-size: 150%;
+    transition: all 0.2s;
+}
+
+.endStep {
+    opacity: 1;
+}
\ No newline at end of file
diff --git a/src/frontend/app/installer/install-action/install-action.component.ts b/src/frontend/app/installer/install-action/install-action.component.ts
new file mode 100644
index 0000000000000000000000000000000000000000..a781b7ba658234daf662d78fcfd19822c4b1c08c
--- /dev/null
+++ b/src/frontend/app/installer/install-action/install-action.component.ts
@@ -0,0 +1,72 @@
+import { Component, OnInit, Inject } from '@angular/core';
+import { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';
+import { LANG } from '../../../app/translate.component';
+import { HttpClient } from '@angular/common/http';
+import { tap } from 'rxjs/internal/operators/tap';
+import { catchError } from 'rxjs/internal/operators/catchError';
+import { of } from 'rxjs/internal/observable/of';
+
+@Component({
+    selector: 'app-install-action',
+    templateUrl: './install-action.component.html',
+    styleUrls: ['./install-action.component.scss']
+})
+export class InstallActionComponent implements OnInit {
+    lang: any = LANG;
+    steps: any[] = [];
+    customId: string = '';
+
+    constructor(@Inject(MAT_DIALOG_DATA) public data: any, public dialogRef: MatDialogRef<InstallActionComponent>, public http: HttpClient) { }
+
+    async ngOnInit(): Promise<void> {
+        this.initSteps();
+
+        for (let index = 0; index < this.data.length; index++) {
+            this.steps[index].state = 'inProgress';
+            await this.doStep(index);
+        }
+    }
+
+    initSteps() {
+        this.data.forEach((step: any, index: number) => {
+            if (index === 0) {
+                this.customId = step.body.customName;
+            } else {
+                step.body.customName = this.customId;
+            }
+            this.steps.push(
+                {
+                    label: step.description,
+                    state: '',
+                    msgErr: '',
+                }
+            );
+        });
+    }
+
+    doStep(index: number) {
+        return new Promise((resolve, reject) => {
+            console.log(this.steps[index]);
+            this.http.post(this.data[index].route, this.data[index].body).pipe(
+                tap((data: any) => {
+                    this.steps[index].state = 'OK';
+                    resolve(true);
+                }),
+                catchError((err: any) => {
+                    this.steps[index].state = 'KO';
+                    resolve(true);
+                    this.steps[index].msgErr = err.error.errors;
+                    return of(false);
+                })
+            ).subscribe();
+        });
+    }
+
+    isInstallComplete() {
+        return this.steps.filter(step => step.state === '' ).length === 0;
+    }
+
+    isInstallError() {
+        return this.steps.filter(step => step.state === 'KO' ).length > 0;
+    }
+}
diff --git a/src/frontend/app/installer/installer.component.html b/src/frontend/app/installer/installer.component.html
index d144878cebac73aa23a6361938749fcfb9ffcc2e..aafc6c6b2db0671340738e513efd47ec8dc051e1 100644
--- a/src/frontend/app/installer/installer.component.html
+++ b/src/frontend/app/installer/installer.component.html
@@ -11,7 +11,7 @@
                         <ng-template matStepLabel>Installation</ng-template>
                         <div class="stepContainer">
                             <div class="stepContent">
-                                <app-welcome></app-welcome>
+                                <app-welcome #stepContent></app-welcome>
                             </div>
                             <button mat-fab matStepperNext class="nextStepButton" color="primary">
                                 <mat-icon class="fa fa-arrow-right"></mat-icon>
@@ -22,7 +22,7 @@
                         <ng-template matStepLabel>{{lang.prerequisite}}</ng-template>
                         <div class="stepContainer">
                             <div class="stepContent">
-                                <app-prerequisite #appPrerequisite></app-prerequisite>
+                                <app-prerequisite #appPrerequisite #stepContent></app-prerequisite>
                             </div>
                             <button mat-fab matStepperPrevious class="previousStepButton" color="primary">
                                 <mat-icon class="fa fa-arrow-left"></mat-icon>
@@ -36,7 +36,7 @@
                         <ng-template matStepLabel>{{lang.database}}</ng-template>
                         <div class="stepContainer">
                             <div class="stepContent">
-                                <app-database #appDatabase></app-database>
+                                <app-database #appDatabase #stepContent></app-database>
                             </div>
                             <button mat-fab matStepperPrevious class="previousStepButton" color="primary">
                                 <mat-icon class="fa fa-arrow-left"></mat-icon>
@@ -50,7 +50,7 @@
                         <ng-template matStepLabel>{{lang.docserver}}</ng-template>
                         <div class="stepContainer">
                             <div class="stepContent">
-                                <app-docservers #appDocservers></app-docservers>
+                                <app-docservers #appDocservers #stepContent></app-docservers>
                             </div>
                             <button mat-fab matStepperPrevious class="previousStepButton" color="primary">
                                 <mat-icon class="fa fa-arrow-left"></mat-icon>
@@ -64,7 +64,7 @@
                         <ng-template matStepLabel>{{lang.customization}}</ng-template>
                         <div class="stepContainer">
                             <div class="stepContent">
-                                <app-customization #appCustomization></app-customization>
+                                <app-customization #appCustomization #stepContent></app-customization>
                             </div>
                             <button mat-fab matStepperPrevious class="previousStepButton" color="primary">
                                 <mat-icon class="fa fa-arrow-left"></mat-icon>
@@ -78,7 +78,7 @@
                         <ng-template matStepLabel>{{lang.userAdmin}}</ng-template>
                         <div class="stepContainer">
                             <div class="stepContent">
-                                <app-useradmin #appUseradmin></app-useradmin>
+                                <app-useradmin #appUseradmin #stepContent (tiggerInstall)="endInstall()"></app-useradmin>
                             </div>
                             <button mat-fab matStepperPrevious class="previousStepButton" color="primary">
                                 <mat-icon class="fa fa-arrow-left"></mat-icon>
diff --git a/src/frontend/app/installer/installer.component.ts b/src/frontend/app/installer/installer.component.ts
index 8b9ba01c291a3f41510bf1a570727b46a370bfda..6c3ffae6f084a3be7904b8a1d4f0533cfca422ed 100644
--- a/src/frontend/app/installer/installer.component.ts
+++ b/src/frontend/app/installer/installer.component.ts
@@ -1,4 +1,4 @@
-import { Component, OnInit, ViewChild, AfterViewInit } from '@angular/core';
+import { Component, OnInit, ViewChild, AfterViewInit, ViewChildren } from '@angular/core';
 import { HttpClient } from '@angular/common/http';
 import { Router } from '@angular/router';
 import { HeaderService } from '../../service/header.service';
@@ -7,19 +7,32 @@ import { STEPPER_GLOBAL_OPTIONS } from '@angular/cdk/stepper';
 import { MatStepper } from '@angular/material/stepper';
 import { AppService } from '../../service/app.service';
 import { LANG } from '../translate.component';
+import { SortPipe } from '../../plugins/sorting.pipe';
+import { StepAction } from './types';
+import { MatDialog } from '@angular/material/dialog';
+import { InstallActionComponent } from './install-action/install-action.component';
+import { filter } from 'rxjs/internal/operators/filter';
+import { tap } from 'rxjs/internal/operators/tap';
+import { finalize } from 'rxjs/internal/operators/finalize';
+import { catchError } from 'rxjs/internal/operators/catchError';
+import { of } from 'rxjs/internal/observable/of';
+import { FunctionsService } from '../../service/functions.service';
 
 @Component({
     templateUrl: './installer.component.html',
     styleUrls: ['./installer.component.scss'],
-    providers: [{
-        provide: STEPPER_GLOBAL_OPTIONS, useValue: { showError: true }
-    }]
+    providers: [
+        {
+            provide: STEPPER_GLOBAL_OPTIONS, useValue: { showError: true },
+        },
+        SortPipe
+    ]
 })
 export class InstallerComponent implements OnInit, AfterViewInit {
 
     lang: any = LANG;
 
-    @ViewChild('stepper', { static: true }) stepper: MatStepper;
+    @ViewChildren('stepContent') stepContent: any;
 
     constructor(
         private http: HttpClient,
@@ -27,6 +40,9 @@ export class InstallerComponent implements OnInit, AfterViewInit {
         private headerService: HeaderService,
         private notify: NotificationService,
         public appService: AppService,
+        private sortPipe: SortPipe,
+        public dialog: MatDialog,
+        private functionService: FunctionsService
     ) { }
 
     ngOnInit(): void {
@@ -54,7 +70,32 @@ export class InstallerComponent implements OnInit, AfterViewInit {
     }
 
     endInstall() {
-        this.stepper.next();
+        let installContent: StepAction[] = [];
+        this.stepContent.toArray().forEach((component: any) => {
+            installContent = installContent.concat(component.getInfoToInstall());
+        });
+
+        installContent = this.sortPipe.transform(installContent, 'installPriority');
+
+        console.log(installContent);
+
+        // this.stepper.next();
+
+        const dialogRef = this.dialog.open(InstallActionComponent, {
+            panelClass: 'maarch-modal',
+            disableClose: true,
+            width: '500px',
+            data: installContent
+        });
+        dialogRef.afterClosed().pipe(
+            filter((result: any) => !this.functionService.empty(result)),
+            tap((result: any) => {
+            }),
+            catchError((err: any) => {
+                this.notify.handleErrors(err);
+                return of(false);
+            })
+        ).subscribe();
     }
 
 }
diff --git a/src/frontend/app/installer/prerequisite/prerequisite.component.html b/src/frontend/app/installer/prerequisite/prerequisite.component.html
index f5234684781c895e082dffc80d307371efafb566..7a40fd37f874577fedbcb3bb26ab6dcd88c97c99 100644
--- a/src/frontend/app/installer/prerequisite/prerequisite.component.html
+++ b/src/frontend/app/installer/prerequisite/prerequisite.component.html
@@ -10,17 +10,11 @@
                 <mat-list-item>
                     <mat-icon mat-list-icon class="fa iconCheckPackage icon_{{package.state}}"></mat-icon>
                     <div mat-line class="packageName">{{lang['install_'+package.label]}} <i class="fa fa-info-circle" [title]="lang['install_'+package.label+'_desc']"></i></div>
-                    <!--<div mat-line style="color:#666;">{{lang['install_'+package.label+'_desc']}}</div>-->
                 </mat-list-item>  
             </mat-grid-tile>
           </mat-grid-list>
-          
-        <!--<div style="display: flex;">
-            <mat-list-item *ngFor="let package of packagesList[groupPackage.key]">
-                <mat-icon mat-list-icon class="fa iconCheckPackage icon_{{package.state}}"></mat-icon>
-                <div mat-line style="font-size: 120%;">{{lang['install_'+package.label]}}</div>
-                <div mat-line style="color:#666;">{{lang['install_'+package.label+'_desc']}}</div>
-            </mat-list-item>    
-        </div>-->
     </mat-list>
+    <div style="text-align: center;">
+        <button mat-raised-button type="button" color="primary" (click)="getStepData()">{{lang.updateInformations}}</button>
+    </div>
 </div>
diff --git a/src/frontend/app/installer/prerequisite/prerequisite.component.ts b/src/frontend/app/installer/prerequisite/prerequisite.component.ts
index c4a48ef8fc65f1d371faa0680b86b14a77844b2e..0576112f56c52c34f41a2bcb264b1c05cb6a1591 100644
--- a/src/frontend/app/installer/prerequisite/prerequisite.component.ts
+++ b/src/frontend/app/installer/prerequisite/prerequisite.component.ts
@@ -160,4 +160,8 @@ export class PrerequisiteComponent implements OnInit {
     getFormGroup() {
         return this.stepFormGroup;
     }
+
+    getInfoToInstall(): any[] {
+        return [];
+    }
 }
diff --git a/src/frontend/app/installer/types.ts b/src/frontend/app/installer/types.ts
new file mode 100644
index 0000000000000000000000000000000000000000..aa91a4d37b882071430b1026a89a39107a502d40
--- /dev/null
+++ b/src/frontend/app/installer/types.ts
@@ -0,0 +1,14 @@
+/**
+ * Launch actions after stepper checked
+ * Gets script version
+ * @param route route to launch action
+ * @param body data json sent to the route
+ * @param description decscription of install action
+ * @param installPriority action order (/!\ NEVER USE 1 IT IS FOR ROUTE /installer/initCustom)
+ */
+export class StepAction {
+    route: string;
+    body: any;
+    description: any;
+    installPriority: 1 | 2 | 3;
+}
diff --git a/src/frontend/app/installer/useradmin/useradmin.component.ts b/src/frontend/app/installer/useradmin/useradmin.component.ts
index ff67cdfdda94a4a6532ffb744920255f3725503e..83a4b43f468d9a5894a0e0286575ec71b3525f28 100644
--- a/src/frontend/app/installer/useradmin/useradmin.component.ts
+++ b/src/frontend/app/installer/useradmin/useradmin.component.ts
@@ -1,4 +1,4 @@
-import { Component, OnInit } from '@angular/core';
+import { Component, OnInit, EventEmitter, Output } from '@angular/core';
 import { FormGroup, FormBuilder, Validators } from '@angular/forms';
 import { NotificationService } from '../../notification.service';
 import { LANG } from '../../translate.component';
@@ -15,6 +15,8 @@ export class UseradminComponent implements OnInit {
 
     hide: boolean = true;
 
+    @Output() tiggerInstall = new EventEmitter<string>();
+
     constructor(
         private _formBuilder: FormBuilder,
         private notify: NotificationService,
@@ -64,7 +66,18 @@ export class UseradminComponent implements OnInit {
         return this.stepFormGroup;
     }
 
-    launchInstall() {
+    getInfoToInstall(): any[] {
+        return [];
+        /*return {
+            body : {
+                login: this.stepFormGroup.controls['login'].value,
+                password: this.stepFormGroup.controls['password'].value,
+            },
+            route : '/installer/useradmin'
+        };*/
+    }
 
+    launchInstall() {
+        this.tiggerInstall.emit();
     }
 }
diff --git a/src/frontend/app/installer/welcome/welcome.component.ts b/src/frontend/app/installer/welcome/welcome.component.ts
index e1a1386520279a30dddb99c516c19a5bedf77513..862b9ae90dec452a60781292e46676d146d3c543 100644
--- a/src/frontend/app/installer/welcome/welcome.component.ts
+++ b/src/frontend/app/installer/welcome/welcome.component.ts
@@ -14,7 +14,16 @@ export class WelcomeComponent implements OnInit {
 
     constructor() { }
 
-    ngOnInit(): void {
+    ngOnInit(): void { }
+
+    getInfoToInstall(): any[] {
+        return [];
+        /*return {
+            body : {
+                lang: this.selectedLang,
+            },
+            route : '/installer/lang'
+        };*/
     }
 
 }
diff --git a/src/frontend/lang/lang-fr.ts b/src/frontend/lang/lang-fr.ts
index 4eff1d4036c724d2a4632782f483ff2de21dd66e..43f00607b38ca7931b0036ecd875ed525eb3da06 100755
--- a/src/frontend/lang/lang-fr.ts
+++ b/src/frontend/lang/lang-fr.ts
@@ -1768,6 +1768,7 @@ export const LANG_FR = {
     "phpConfiguration": "Configuration PHP",
     "dbName": "Nom de la base de données",
     "stepDatabase_desc": "Maarch Courrier nécessite une connexion à une base de données afin de stocker les métas-données des documents stockés ainsi que la configuration de l'application.",
+    "stepDatabaseActionDesc": "Création de la base de données",
     "checkInformations": "Vérifier les informations",
     "badInformations": "Les informations sont incorrectes",
     "rightInformations": "Les informations sont correctes",
@@ -1787,5 +1788,7 @@ export const LANG_FR = {
     "mailsWithStatus": " courrier(s) avec le statut ",
     "indexingModelReplaceToDelete": "Pour le supprimer vous devez le remplacer par un autre modèle.",
     "indexingModelFieldsReset": "Les champs suivants ne sont pas dans le modèle sélectionné et seront réinitialisé pour tous les courriers : ",
-    "indexingModelReassign": "Réaffection du modèle d'enregistrement"
+    "indexingModelReassign": "Réaffection du modèle d'enregistrement",
+    "updateInformations": "Actualiser les informations",
+    "dbSample": "Jeu de données"
 };
diff --git a/src/frontend/plugins/sorting.pipe.ts b/src/frontend/plugins/sorting.pipe.ts
index 8c60342dae8b55bf019b2efd996da4f35be6b654..4c01c1fd7d3622b8c32b14f8065208d3125f7f57 100755
--- a/src/frontend/plugins/sorting.pipe.ts
+++ b/src/frontend/plugins/sorting.pipe.ts
@@ -1,42 +1,43 @@
 import { Pipe } from '@angular/core';
-import { LatinisePipe } from "ngx-pipes";
+import { LatinisePipe } from 'ngx-pipes';
 import { FunctionsService } from '../service/functions.service';
 
-@Pipe({ name: "sortBy" })
+@Pipe({ name: 'sortBy' })
 export class SortPipe {
 
-	constructor(
-		private latinisePipe: LatinisePipe,
-		public functions: FunctionsService
-		) { }
+    constructor(
+        private latinisePipe: LatinisePipe,
+        public functions: FunctionsService
+    ) { }
 
 
-	transform(array: Array<string>, args: string): Array<string> {
-		let normA = '';
-		let normB = '';
-		
-		if (!this.functions.empty(array)) {
-			array.sort((a: any, b: any) => {
-				if (args === undefined) {
-					normA = this.latinisePipe.transform(a).toLocaleLowerCase();
-					normB = this.latinisePipe.transform(b).toLocaleLowerCase();
-				} else {
-					a[args] = a[args] !== null ? a[args] : '';
-					b[args] = b[args] !== null ? b[args] : '';
-					normA = this.latinisePipe.transform(a[args]).toLocaleLowerCase();
-					normB = this.latinisePipe.transform(b[args]).toLocaleLowerCase();
-				}
-				if (normA < normB) {
-					return -1;
-				} else if (normA > normB) {
-					return 1;
-				} else {
-					return 0;
-				}
-			});
-			return array;
-		} else {
-			return [];
-		}
-	}
+    transform(array: Array<any>, args: string): Array<any> {
+        let normA = '';
+        let normB = '';
+
+        if (!this.functions.empty(array)) {
+            array.sort((a: any, b: any) => {
+
+                if (args === undefined) {
+                    normA = this.latinisePipe.transform(a).toLocaleLowerCase();
+                    normB = this.latinisePipe.transform(b).toLocaleLowerCase();
+                } else {
+                    a[args] = a[args] !== null ? a[args] : '';
+                    b[args] = b[args] !== null ? b[args] : '';
+                    normA = typeof a[args] !== 'number' ? this.latinisePipe.transform(a[args]).toLocaleLowerCase() : a[args];
+                    normB = typeof b[args] !== 'number' ? this.latinisePipe.transform(b[args]).toLocaleLowerCase() : b[args];
+                }
+                if (normA < normB) {
+                    return -1;
+                } else if (normA > normB) {
+                    return 1;
+                } else {
+                    return 0;
+                }
+            });
+            return array;
+        } else {
+            return [];
+        }
+    }
 }