diff --git a/src/frontend/app/administration/contact/contact-duplicate/manage-duplicate/manage-duplicate.component.ts b/src/frontend/app/administration/contact/contact-duplicate/manage-duplicate/manage-duplicate.component.ts
index 0c68d7cf0a1b044fe0c972928621ab7c28ae631a..55e9b6ecad111d3a0d44db0d3ab866c54903a3dd 100644
--- a/src/frontend/app/administration/contact/contact-duplicate/manage-duplicate/manage-duplicate.component.ts
+++ b/src/frontend/app/administration/contact/contact-duplicate/manage-duplicate/manage-duplicate.component.ts
@@ -61,7 +61,7 @@ export class ManageDuplicateComponent implements OnInit {
         console.log(masterContact);
         console.log(slaveContacts);
 
-        this.http.post('../rest/contacts/merged', { master : masterContact, saves : slaveContacts}).pipe(
+        this.http.put(`../rest/contacts/${masterContact}/merge`, { duplicates : slaveContacts}).pipe(
             tap(() => {
                 this.dialogRef.close('success');
             }),
diff --git a/src/frontend/app/contact/contact-detail/contact-detail.component.html b/src/frontend/app/contact/contact-detail/contact-detail.component.html
index 4d73a83f25d212364edaf9af930b01bb84897060..af0b0f1e0f5e94bb3a41e2d7ae20432f415a3738 100644
--- a/src/frontend/app/contact/contact-detail/contact-detail.component.html
+++ b/src/frontend/app/contact/contact-detail/contact-detail.component.html
@@ -5,14 +5,16 @@
 </ng-container>
 <ng-template #elseTemplate>
     <mat-card class="contact-card">
+        <div *ngIf="selectable" class="selectable" [class.selected]="contact.selected">
+            <button style="line-height: 15px;padding: 5px;" *ngIf="!contact.selected" mat-raised-button color="primary" (click)="toggleContact(contact)"><span>selectionner</span><br><small style="font-size:80%">{{contact.resourcesCount}} élement(s) associé(s)</small></button>
+            <button style="line-height: 15px;padding: 10px;" *ngIf="contact.selected" mat-raised-button color="primary" (click)="toggleContact(contact)"><i class="far fa-check-circle"></i> contact sélectionnée</button>
+        </div>
         <mat-card-header>
             <div mat-card-avatar class="contact-header-image fa"
-                [class.fa-address-card]="contact.type === 'contact' && !selectable"
-                [class.fa-users]="contact.type ==='contactGroup' && !selectable"
+                [class.fa-address-card]="contact.type === 'contact'"
+                [class.fa-users]="contact.type ==='contactGroup'"
                 [class.fa-sitemap]="contact.type ==='entity'"
-                [class.fa-user]="contact.type ==='user' && !selectable" [title]="lang['contact_'+contact.type]">
-                <mat-checkbox *ngIf="selectable" color="primary" (change)="toggleContact($event.checked, contact);">
-                </mat-checkbox>
+                [class.fa-user]="contact.type ==='user'" [title]="lang['contact_'+contact.type]">
             </div>
             <mat-card-title *ngIf="!functionsService.empty(contact.firstname) || !functionsService.empty(contact.lastname)"
                 [title]="contact.civility.label + ' ' + contact.firstname + ' ' + contact.lastname">
@@ -74,7 +76,7 @@
                         [class.newData]="isNewValue('addressCountry')"> {{contact.addressCountry}} </p>
                 </mat-list-item>
             </mat-list>
-            <mat-expansion-panel *ngIf="!emptyOtherInfo(contact)">
+            <mat-expansion-panel *ngIf="!emptyOtherInfo(contact)" [expanded]="selectable">
                 <mat-expansion-panel-header>
                     <mat-panel-title>
                         {{lang.othersInfos}}
diff --git a/src/frontend/app/contact/contact-detail/contact-detail.component.scss b/src/frontend/app/contact/contact-detail/contact-detail.component.scss
index c7eaded07f0e3d83a33368a936d79924a8fddde3..b1f415c078c87c526de2054b6936a93d334a2542 100644
--- a/src/frontend/app/contact/contact-detail/contact-detail.component.scss
+++ b/src/frontend/app/contact/contact-detail/contact-detail.component.scss
@@ -115,4 +115,32 @@
 
 .newData {
     color : #F99830;
+}
+
+.selectable {
+    z-index: 1;
+    background: #0003;
+    position: absolute;
+    align-items: center;
+    justify-content: center;
+    display: flex;
+    width: 100%;
+    height: 100%;
+    opacity: 0;
+    flex-direction: column;
+    transition: opacity 0.2s;
+}
+
+.contact-card:hover {
+    .mat-card-content, .mat-card-header {
+        opacity: 0.5;
+    }
+    .selectable {
+        opacity: 1;
+        transition: opacity 0.2s;
+    }
+}
+
+.selected {
+    opacity: 1 !important;
 }
\ No newline at end of file
diff --git a/src/frontend/app/contact/contact-detail/contact-detail.component.ts b/src/frontend/app/contact/contact-detail/contact-detail.component.ts
index c2910aaed672bdf8ddd9fc03621859a7641cb913..cf5fc6241ab03e69f58e2b488f18b272445396b8 100644
--- a/src/frontend/app/contact/contact-detail/contact-detail.component.ts
+++ b/src/frontend/app/contact/contact-detail/contact-detail.component.ts
@@ -71,7 +71,8 @@ export class ContactDetailComponent implements OnInit {
     loadContact(contactId: number, type: string) {
 
         if (type === 'contact') {
-            this.http.get('../rest/contacts/' + contactId).pipe(
+            const queryParam: string = this.selectable ? '?resourcesCount=true' : '';
+            this.http.get('../rest/contacts/' + contactId + queryParam).pipe(
                 tap((contact: any) => {
                     this.contact = {
                         ...contact,
@@ -154,8 +155,10 @@ export class ContactDetailComponent implements OnInit {
         }
     }
 
-    toggleContact(state: boolean, contact: any) {
-        if (state) {
+    toggleContact(contact: any) {
+        contact.selected = !contact.selected;
+
+        if (contact.selected) {
             this.afterSelectedEvent.emit(contact);
         } else {
             this.afterDeselectedEvent.emit(contact);