diff --git a/src/frontend/app/diffusions/diffusions-list.component.ts b/src/frontend/app/diffusions/diffusions-list.component.ts
index ae9cb1340288129890933cdd48c7fc486086f6b0..59d04e8be4e1fd9b4f05116e0745205ee7b41ddb 100644
--- a/src/frontend/app/diffusions/diffusions-list.component.ts
+++ b/src/frontend/app/diffusions/diffusions-list.component.ts
@@ -383,30 +383,31 @@ export class DiffusionsListComponent implements OnInit {
     async addElem(element: any) {
         let item_mode: any = 'cc';
 
-        if (this.diffList["dest"].items.length === 0) {
+        if (this.hasEmptyDest() && element.type == 'user') {
             item_mode = await this.isUserInCurrentEntity(element.serialId) && this.availableRoles.filter(role => role.id === 'dest')[0].canUpdate ? 'dest' : 'cc';
         }
 
-        if (this.diffList["cc"].items.map((e: any) => { return e.itemId; }).indexOf(element.id) == -1) {
-            let itemType = '';
-            if (element.type == 'user') {
-                itemType = 'user';
-            } else {
-                itemType = 'entity';
-            }
+        let itemType = '';
+        if (element.type == 'user') {
+            itemType = 'user';
+        } else {
+            itemType = 'entity';
+        }
 
-            const newElemListModel: any = {
-                listinstance_id: null,
-                item_mode: item_mode,
-                item_type: itemType,
-                itemSerialId: element.serialId,
-                itemId: element.id,
-                itemLabel: element.idToDisplay,
-                itemSubLabel: element.descriptionToDisplay,
-                difflist_type: 'entity_id',
-                process_date: null,
-                process_comment: null,
-            };
+        const newElemListModel: any = {
+            listinstance_id: null,
+            item_mode: item_mode,
+            item_type: itemType,
+            itemSerialId: element.serialId,
+            itemId: element.id,
+            itemLabel: element.idToDisplay,
+            itemSubLabel: element.descriptionToDisplay,
+            difflist_type: 'entity_id',
+            process_date: null,
+            process_comment: null,
+        };
+
+        if (!this.isItemInThisRole(newElemListModel, 'cc')) {
             this.diffList[item_mode].items.unshift(newElemListModel);
 
             if (this.diffFormControl !== undefined) {
@@ -415,6 +416,17 @@ export class DiffusionsListComponent implements OnInit {
         }
     }
 
+    isItemInThisRole(element: any, roleId: string) {
+        const result = this.diffList[roleId].items.map((item: any, index: number) => {
+                return {
+                    ...item,
+                    index: index
+                }
+            }).filter((item: any) => item.itemSerialId === element.itemSerialId && item.item_type === element.item_type);
+
+        return result.length > 0;
+    }
+
     isUserInCurrentEntity(userId: number) {
         return new Promise((resolve, reject) => {
             this.http.get(`../../rest/entities/${this.currentEntityId}/users`).pipe(
@@ -493,10 +505,9 @@ export class DiffusionsListComponent implements OnInit {
                     if (this.diffList['dest'].items.length > 0) {
                         const destUser = this.diffList['dest'].items[0];
 
-                        this.diffList[oldRole.id].items.map((item: any) => item.id).
-                            indexFound = this.diffList[oldRole.id].items.map((item: any) => item.userId).indexOf(destUser.userId);
+                        indexFound = this.diffList[oldRole.id].items.map((item: any) => item.itemSerialId).indexOf(destUser.itemSerialId);
 
-                        if (indexFound === -1) {
+                        if (indexFound === -1 && !this.isItemInThisRole(destUser, oldRole.id)) {
                             destUser.item_mode = oldRole.id;
                             this.diffList[oldRole.id].items.push(destUser);
                         }
@@ -533,13 +544,14 @@ export class DiffusionsListComponent implements OnInit {
     changeUserRole(user: any, oldRole: any, newRole: any) {
         let indexFound: number;
 
-        indexFound = this.diffList[oldRole.id].items.map((item: any) => item.userId).indexOf(user.userId);
-
+        indexFound = this.diffList[oldRole.id].items.map((item: any) => item.itemSerialId).indexOf(user.itemSerialId);
         if (indexFound > -1) {
             this.diffList[oldRole.id].items.splice(indexFound, 1);
         }
-        user.item_mode = newRole.id;
-        this.diffList[newRole.id].items.push(user);
+        if (!this.isItemInThisRole(user, newRole.id)) {
+            user.item_mode = newRole.id;
+            this.diffList[newRole.id].items.push(user);
+        }
         if (this.diffFormControl !== undefined) {
             this.setFormValues();
         }