diff --git a/src/main/java/ui/TGComponent.java b/src/main/java/ui/TGComponent.java
index 10575a4063f50febc27f306f3ff35b4d034eb4c8..15120a872deee317271e33e770c5a14c50718aa5 100755
--- a/src/main/java/ui/TGComponent.java
+++ b/src/main/java/ui/TGComponent.java
@@ -54,6 +54,7 @@ import ui.tmlcd.TMLTaskDiagramPanel;
 import ui.tmlcompd.TMLCPrimitiveComponent;
 import ui.tmlcompd.TMLComponentTaskDiagramPanel;
 import ui.tmldd.TMLArchiArtifact;
+import ui.tmldd.TMLArchiCPUNode;
 import ui.tmldd.TMLArchiDiagramPanel;
 import ui.tmldd.TMLArchiFirewallNode;
 import ui.util.IconManager;
@@ -2669,6 +2670,29 @@ public abstract class TGComponent implements CDElement, GenericTree {
         repaint = true;
     }
 
+    /**
+     * Rename all reference of a primitive component.
+     * @author Fabien Tessier
+     * @param s new name
+     */
+    public void setComponentName(String s) {
+    	for (TURTLEPanel tp: tdp.mgui.tabs)
+			for (TDiagramPanel t: tp.getPanels()) {
+				for (TGComponent t2: t.componentList) {					
+					if (t2 instanceof TMLArchiCPUNode) {
+						TMLArchiCPUNode tcpu = (TMLArchiCPUNode) t2;
+						for (TMLArchiArtifact art: tcpu.getArtifactList()) {
+							if (art.getTaskName().equals(value));
+								art.setTaskName(s);
+							String tmp = art.getValue().replaceAll("(?i)" + value + "$", s);
+							art.setValue(tmp);
+						}			
+					}
+				}
+				t.repaint();		
+			}
+    }
+    
     public final int getState() {
         return state;
     }
diff --git a/src/main/java/ui/tmlcompd/TMLCCompositeComponent.java b/src/main/java/ui/tmlcompd/TMLCCompositeComponent.java
index 44d92160582bab38564bf580d7ca2f910f121a1e..c3dde33139fe47713b956298d2bdf9d2b44baa79 100755
--- a/src/main/java/ui/tmlcompd/TMLCCompositeComponent.java
+++ b/src/main/java/ui/tmlcompd/TMLCCompositeComponent.java
@@ -220,6 +220,13 @@ public class TMLCCompositeComponent extends TGCScalableWithInternalComponent imp
 					JOptionPane.INFORMATION_MESSAGE);
 				return false;
 			}
+			if (((TMLComponentTaskDiagramPanel)(tdp)).isCompositeNameUsed(s)) {
+                JOptionPane.showMessageDialog(frame,
+                                              "Error: the name is already in use",
+                                              "Name modification",
+                                              JOptionPane.ERROR_MESSAGE);
+                return false;
+            }
             setValueWithChange(s);
             return true;
         }
diff --git a/src/main/java/ui/tmlcompd/TMLCPrimitiveComponent.java b/src/main/java/ui/tmlcompd/TMLCPrimitiveComponent.java
index 64b36bf3cde455d306b104c670bb52a32d0e99fb..528d08678703f5a85ce5329de853818cb14e5b2b 100755
--- a/src/main/java/ui/tmlcompd/TMLCPrimitiveComponent.java
+++ b/src/main/java/ui/tmlcompd/TMLCPrimitiveComponent.java
@@ -330,6 +330,7 @@ public class TMLCPrimitiveComponent extends TGCScalableWithInternalComponent imp
 
 
                 //TraceManager.addDev("Set value with change");
+    			setComponentName(s);
                 setValueWithChange(s);
 				isAttacker = s.contains("Attacker");
                 rescaled = true;