diff --git a/src/frontend/app/administration/search/search-administration.component.html b/src/frontend/app/administration/search/search-administration.component.html
index 5fec2fc0f257f10fe46fdd7a6b3a69d690887bd1..cf31222ddfa843b0398b19ab0c16951f6faf4d44 100644
--- a/src/frontend/app/administration/search/search-administration.component.html
+++ b/src/frontend/app/administration/search/search-administration.component.html
@@ -14,7 +14,7 @@
         </div>
         <div class="container" [class.fullContainer]="appService.getViewMode()">
             <div class="container-content">
-                <mat-card class="card-app-content">
+                <mat-card class="card-app-content" *ngIf="!loading">
                     <mat-form-field appearance="outline">
                         <mat-label>{{'lang.tabProcessPosition' | translate}}</mat-label>
                         <mat-select [(ngModel)]="selectedProcessTool.defaultTab">
@@ -47,7 +47,8 @@
                             </button>
                             <mat-menu #menu="matMenu">
                                 <button mat-menu-item *ngFor="let colNum of templateDisplayedSecondaryData"
-                                    (click)="selectedTemplateDisplayedSecondaryData=colNum;reorderDisplayedData()">{{colNum}} {{'lang.columns' | translate}}</button>
+                                    (click)="selectedTemplateDisplayedSecondaryData=colNum;">{{colNum}}
+                                    {{'lang.columns' | translate}}</button>
                             </mat-menu>
                         </span>
                         <span class="area">
@@ -56,9 +57,10 @@
                                     <input id="availableData" name="availableData" type="text" matInput
                                         [formControl]="dataControl" placeholder="{{'lang.availableDatas' | translate}}"
                                         [matAutocomplete]="auto">
-                                    <mat-autocomplete #auto="matAutocomplete" (optionSelected)="addData($event)">
-                                        <mat-option *ngFor="let item of filteredDataOptions | async" [value]="item"
-                                            class="dataList">
+                                    <mat-autocomplete #auto="matAutocomplete"
+                                        (optionSelected)="addData($event.option.value)">
+                                        <mat-option *ngFor="let item of filteredDataOptions | async"
+                                            [value]="item.value" class="dataList">
                                             <span class="optionContent">
                                                 <span class="dataIcon">
                                                     <i color="primary" class="fa {{item.icon}} fa-2x"></i>
@@ -80,17 +82,20 @@
                         </span>
                     </mat-toolbar>
                     <mat-card>
-                        <div *ngIf="displayedSecondaryData.length > 0" cdkDropListGroup style="border: solid 1px #F9983066;border-radius: 4px;">
-                            <mat-toolbar *ngFor="let displayedData of displayedSecondaryData;let indexDisplayedData=index" class="secondaryInformations example-list column-{{selectedTemplateDisplayedSecondaryData}}-list" cdkDropListOrientation="horizontal" cdkDropList
-                                [cdkDropListData]="displayedData" (cdkDropListDropped)="drop($event)">
-                                <ng-container *ngFor="let item of displayedData;let itData=index">
-                                    <span class="example-box" *ngIf="item.value != 'getFolders'" cdkDrag>
+                        <div *ngIf="displayedSecondaryData.length > 0" dnd-sortable-container
+                            [dropZones]="['boxers-zone']" [sortableData]="displayedSecondaryData"
+                            style="border: solid 1px #F9983066;border-radius: 4px;">
+                            <mat-toolbar
+                                class="secondaryInformations example-list column-{{selectedTemplateDisplayedSecondaryData}}-list">
+                                <ng-container *ngFor="let item of displayedSecondaryData;let i=index">
+                                    <span class="example-box" *ngIf="item.value != 'getFolders'" dnd-sortable
+                                        [sortableIndex]="i">
                                         <button *ngIf="displayMode=='label'" color="primary" mat-icon-button
                                             [matMenuTriggerFor]="menu">
                                             <mat-icon fontSet="fas" fontIcon="fa-ellipsis-v fa-2x"></mat-icon>
                                         </button>
                                         <mat-menu #menu="matMenu">
-                                            <button mat-menu-item (click)="removeData(item,itData,indexDisplayedData)">
+                                            <button mat-menu-item (click)="removeData(item,i)">
                                                 <mat-icon class="secondaryInformations_icon" color="warn" fontSet="fas"
                                                     fontIcon="fa-trash fa-2x"></mat-icon>
                                                 <span>{{'lang.delete' | translate}}</span>
@@ -143,6 +148,8 @@
                                         </span>
                                     </span>
                                 </ng-container>
+
+
                             </mat-toolbar>
                         </div>
                         <div class="resultRow newRow">
@@ -181,23 +188,23 @@
                                 </button>
                             </mat-button-toggle-group>
                         </div>
-                        <div *ngFor="let displayedData of displayedSecondaryData;let indexDisplayedData=index">
-                            <div *ngFor="let item of displayedData;let itData=index" class="folder-info">
-                                <ng-container *ngIf="item.value=='getFolders'">
-                                    <button *ngIf="displayMode=='label'" color="primary" mat-icon-button [matMenuTriggerFor]="menu">
-                                        <mat-icon fontSet="fas" fontIcon="fa-ellipsis-v fa-2x"></mat-icon>                    
+                        <div *ngFor="let item of displayedSecondaryData;let i=index" class="folder-info">
+                            <ng-container *ngIf="item.value=='getFolders'">
+                                <button *ngIf="displayMode=='label'" color="primary" mat-icon-button
+                                    [matMenuTriggerFor]="menu">
+                                    <mat-icon fontSet="fas" fontIcon="fa-ellipsis-v fa-2x"></mat-icon>
+                                </button>
+                                <mat-menu #menu="matMenu">
+                                    <button mat-menu-item (click)="removeData(item,i)">
+                                        <mat-icon class="secondaryInformations_icon" color="warn" fontSet="fas"
+                                            fontIcon="fa-trash fa-2x">
+                                        </mat-icon>
+                                        <span>{{'lang.delete' | translate}}</span>
                                     </button>
-                                    <mat-menu #menu="matMenu">
-                                        <button mat-menu-item (click)="removeData(item,itData, indexDisplayedData)">
-                                            <mat-icon class="secondaryInformations_icon" color="warn" fontSet="fas" fontIcon="fa-trash fa-2x">
-                                            </mat-icon>
-                                            <span>{{'lang.delete' | translate}}</span>
-                                        </button>
-                                    </mat-menu>
-                                    <span class="badge badge-folder"><i class="fa fa-folder"></i>
-                                        {{item[displayMode]}}</span>
-                                </ng-container>
-                            </div>                    
+                                </mat-menu>
+                                <span class="badge badge-folder"><i class="fa fa-folder"></i>
+                                    {{item[displayMode]}}</span>
+                            </ng-container>
                         </div>
                     </mat-card>
                     <div class="row">
diff --git a/src/frontend/app/administration/search/search-administration.component.ts b/src/frontend/app/administration/search/search-administration.component.ts
index e7e9afa99c2f3058912b54ee05e83101cce1d50f..b4bda3a46e70b739e1c1702654a82bf2c289bd29 100644
--- a/src/frontend/app/administration/search/search-administration.component.ts
+++ b/src/frontend/app/administration/search/search-administration.component.ts
@@ -20,7 +20,7 @@ declare var $: any;
 
 export class SearchAdministrationComponent implements OnInit {
 
-    loading: boolean = false;
+    loading: boolean = true;
     customFieldsFormControl = new FormControl({ value: '', disabled: false });
 
 
@@ -147,13 +147,13 @@ export class SearchAdministrationComponent implements OnInit {
             'icon': 'fa-barcode'
         }
     ];
-    availableDataClone: any = [];
-    displayedSecondaryData: any = [];
-    displayedSecondaryDataClone: any = [];
+    availableDataClone: any[] = [];
+    displayedSecondaryData: any[] = [];
+    displayedSecondaryDataClone: any[] = [];
 
     displayMode: string = 'label';
     dataControl = new FormControl();
-    filteredDataOptions: Observable<string[]>;
+    filteredDataOptions: Observable<any[]>;
     listEvent: any[] = [
         {
             id: 'detailDoc',
@@ -248,38 +248,22 @@ export class SearchAdministrationComponent implements OnInit {
         this.headerService.setHeader(this.translate.instant('lang.searchAdministration'));
         await this.initCustomFields();
         await this.getTemplate();
-        this.filteredDataOptions = this.dataControl.valueChanges
-            .pipe(
-                startWith(''),
-                map(value => this._filterData(value))
-            );
 
         this.availableDataClone = JSON.parse(JSON.stringify(this.availableData));
-        let indexData: number;
         this.selectedTemplateDisplayedSecondaryDataClone = this.selectedTemplateDisplayedSecondaryData;
-        const tmpData = [];
-        this.displayedSecondaryData.forEach((element: any) => {
-            indexData = this.availableData.map((e: any) => e.value).indexOf(element.value);
-            this.availableData[indexData].cssClasses = element.cssClasses;
-            this.displayedSecondaryData.push(this.availableData[indexData]);
-            tmpData.push(this.availableData[indexData]);
-            this.availableData.splice(indexData, 1);
-        });
-        let previousIndex = 0;
-        this.displayedSecondaryData = [];
-        tmpData.forEach((object: any, index: any) => {
-            if (index % this.selectedTemplateDisplayedSecondaryData === 0 && index !== 0) {
-                const tmp = tmpData.slice(previousIndex, index);
-                this.displayedSecondaryData.push(tmp);
-                previousIndex = index;
-            }
-        });
-        this.displayedSecondaryData.push(tmpData.slice(previousIndex));
-
         this.selectedListEvent = this.searchAdv.listEvent;
         this.selectedListEventClone = this.selectedListEvent;
         this.selectedProcessToolClone = JSON.parse(JSON.stringify(this.selectedProcessTool));
         this.displayedSecondaryDataClone = JSON.parse(JSON.stringify(this.displayedSecondaryData));
+
+        setTimeout(() => {
+            this.filteredDataOptions = this.dataControl.valueChanges
+                .pipe(
+                    startWith(''),
+                    map(value => this._filterData(value))
+                );
+        }, 0);
+        this.loading = false;
     }
 
     initCustomFields() {
@@ -341,27 +325,26 @@ export class SearchAdministrationComponent implements OnInit {
         }
     }
 
-    addData(event: any) {
-        const i = this.availableData.map((e: any) => e.value).indexOf(event.option.value.value);
-        if ((this.displayedSecondaryData.length === 0) || (this.displayedSecondaryData[this.displayedSecondaryData.length - 1].length >= this.selectedTemplateDisplayedSecondaryData)) {
-            this.displayedSecondaryData.push([]);
-        }
-        this.displayedSecondaryData[this.displayedSecondaryData.length - 1].push(event.option.value);
+    addData(id: any) {
+        const i = this.availableData.map((e: any) => e.value).indexOf(id);
+
+        this.displayedSecondaryData.push(this.availableData.filter((item: any) => item.value === id)[0]);
+
         this.availableData.splice(i, 1);
+
         $('#availableData').blur();
         this.dataControl.setValue('');
     }
 
-    removeData(rmData: any, i: number, indexDisplayedData) {
+    removeData(rmData: any, i: number) {
         this.availableData.push(rmData);
-        this.displayedSecondaryData[indexDisplayedData].splice(i, 1);
+        this.displayedSecondaryData.splice(i, 1);
         this.dataControl.setValue('');
     }
 
     removeAllData() {
-        this.displayedSecondaryData.forEach(element => {
-            this.availableData = this.availableData.concat(element);
-        });
+        this.displayedSecondaryData = this.displayedSecondaryData.concat();
+        this.availableData = this.availableData.concat(this.displayedSecondaryData);
         this.dataControl.setValue('');
         this.displayedSecondaryData = [];
     }
@@ -384,24 +367,17 @@ export class SearchAdministrationComponent implements OnInit {
     }
 
     getTemplate() {
+        this.displayedSecondaryData = [];
+
         return new Promise((resolve, reject) => {
             this.http.get('../rest/search/configuration').pipe(
                 tap((templateData: any) => {
-                    const defaultTab = templateData.configuration.listEvent.defaultTab;
-                    const subInfos = templateData.configuration.listDisplay.subInfos;
-                    const displayData = JSON.parse(JSON.stringify(subInfos));
                     this.selectedTemplateDisplayedSecondaryData = templateData.configuration.listDisplay.templateColumns;
-                    this.selectedProcessTool.defaultTab = defaultTab;
-                    displayData.forEach((element: { value: any; cssClasses: any; icon: any; }) => {
-                        const sampleValue = this.availableData.filter((t: { value: any; }) => t.value === element.value)[0].sample;
-                        const label = this.availableData.filter((t: { value: any; }) => t.value === element.value)[0].label;
-                        this.displayedSecondaryData.push({
-                            'value': element.value,
-                            'label': label,
-                            'sample': sampleValue,
-                            'cssClasses': element.cssClasses,
-                            'icon': element.icon
-                        });
+                    this.selectedProcessTool.defaultTab = templateData.configuration.listEvent.defaultTab;
+
+                    templateData.configuration.listDisplay.subInfos.forEach((element: any) => {
+                        this.addData(element.value);
+                        this.displayedSecondaryData[this.displayedSecondaryData.length - 1].cssClasses = element.cssClasses;
                     });
                     resolve(true);
                 }),
@@ -414,30 +390,17 @@ export class SearchAdministrationComponent implements OnInit {
     }
 
     saveTemplate() {
-        const template: any = [];
-        this.displayedSecondaryData.forEach((subArray: any) => {
-            subArray.forEach((element: any) => {
-                template.push(
-                    {
-                        'value':      element.value,
-                        'cssClasses': element.cssClasses,
-                        'icon':       element.icon,
-                    }
-                );
-            });
-        });
-
         const objToSend = {
             templateColumns: this.selectedTemplateDisplayedSecondaryData,
-            subInfos: template
+            subInfos: this.displayedSecondaryData
         };
         this.selectedListEvent = JSON.parse(JSON.stringify({
-            'defaultTab' : this.selectedProcessTool.defaultTab
+            'defaultTab': this.selectedProcessTool.defaultTab
         }));
         this.http.put('../rest/configurations/admin_search ', { 'listDisplay': objToSend, 'listEvent': this.selectedListEvent, 'list_event_data': this.selectedProcessTool })
             .subscribe(() => {
                 this.displayedSecondaryDataClone = JSON.parse(JSON.stringify(this.displayedSecondaryData));
-                this.searchAdv.listDisplay = template;
+                this.searchAdv.listDisplay = this.displayedSecondaryData;
                 this.searchAdv.listEvent = this.selectedListEvent;
                 this.selectedListEventClone = this.selectedListEvent;
                 this.searchAdv.list_event_data = this.selectedProcessTool;
@@ -474,17 +437,10 @@ export class SearchAdministrationComponent implements OnInit {
         this.selectedProcessTool = JSON.parse(JSON.stringify(this.selectedProcessToolClone));
         this.availableData = JSON.parse(JSON.stringify(this.availableDataClone));
         this.selectedTemplateDisplayedSecondaryData = JSON.parse(JSON.stringify(this.selectedTemplateDisplayedSecondaryDataClone));
-
-        let indexData: number = 0;
-        this.displayedSecondaryData.forEach((element: any) => {
-            indexData = this.availableData.map((e: any) => e.value).indexOf(element.value);
-            this.availableData.splice(indexData, 1);
-        });
         this.dataControl.setValue('');
     }
 
     hasFolder() {
-        // tslint:disable-next-line: no-shadowed-variable
         if (this.displayedSecondaryData.map((data: any) => data.value).indexOf('getFolders') > -1) {
             return true;
         } else {
@@ -507,23 +463,4 @@ export class SearchAdministrationComponent implements OnInit {
             this.selectedProcessTool.canUpdateModel = state;
         }
     }
-
-    reorderDisplayedData() {
-        let mergedArray = [];
-        this.displayedSecondaryData.forEach((subArray: any) => {
-            mergedArray = mergedArray.concat(subArray);
-        });
-
-        let previousIndex = 0;
-        this.displayedSecondaryData = [];
-        mergedArray.forEach((object: any, index: any) => {
-            if (index % this.selectedTemplateDisplayedSecondaryData === 0 && index !== 0) {
-                const tmp = mergedArray.slice(previousIndex, index);
-                this.displayedSecondaryData.push(tmp);
-                previousIndex = index;
-            }
-        });
-        this.displayedSecondaryData.push(mergedArray.slice(previousIndex));
-    }
-
 }