From fba5c79ee128b748a1cfd845d207989db6438f2d Mon Sep 17 00:00:00 2001
From: lfrenot <leon.frenot@ens-lyon.fr>
Date: Thu, 30 Jun 2022 17:24:36 +0200
Subject: [PATCH] refactoring constructeurs

---
 .../mutation/ActionMutation.java              |  44 +++++-
 .../mutation/ActionOnSignalMutation.java      |  61 ++++----
 .../mutation/AddActionMutation.java           |  19 ++-
 .../mutation/AddActionOnSignalMutation.java   |  13 +-
 .../mutation/AddAssociationMutation.java      |   7 +-
 .../mutation/AddAttributeMutation.java        |  10 +-
 .../mutation/AddBlockMutation.java            |   4 +-
 .../mutation/AddExpireTimerMutation.java      |   9 +-
 .../mutation/AddMethodMutation.java           |  13 +-
 .../mutation/AddMutation.java                 |   2 +-
 .../mutation/AddRandomMutation.java           |  11 +-
 .../mutation/AddRelationMutation.java         |   2 +-
 .../mutation/AddResetTimerMutation.java       |   9 +-
 .../mutation/AddSetTimerMutation.java         |  10 +-
 .../mutation/AddSignalMutation.java           |   9 +-
 .../mutation/AddStateMutation.java            |   7 +-
 .../mutation/AddTransitionMutation.java       |   9 +-
 .../mutation/AssociationMutation.java         |  22 ++-
 .../mutation/AttributeMutation.java           |  37 +++--
 .../mutation/AvatarMutation.java              |   4 +-
 ...utation.java => BlockElementMutation.java} |  19 ++-
 .../mutation/ExpireTimerMutation.java         |  12 ++
 .../mutation/MdActionMutation.java            |  11 +-
 .../mutation/MdActionOnSignalMutation.java    |  39 ++---
 .../mutation/MdAttributeMutation.java         |   5 +-
 .../mutation/MdExpireTimerMutation.java       |  10 +-
 .../mutation/MdMethodMutation.java            |  16 ++-
 .../mutation/MdRandomMutation.java            |  42 ++++--
 .../mutation/MdRelationMutation.java          |  17 +--
 .../mutation/MdResetTimerMutation.java        |  10 +-
 .../mutation/MdSetTimerMutation.java          |  40 +++---
 .../mutation/MdSignalMutation.java            |  17 ++-
 .../mutation/MdTransitionMutation.java        |  34 ++---
 .../mutation/MethodMutation.java              |  40 ++++--
 .../mutation/NoneActionOnSignalMutation.java  |  72 ++++++++++
 .../mutation/NoneRandomMutation.java          |  72 ++++++++++
 .../mutation/NoneRelationMutation.java        |  64 +++++++++
 .../mutation/NoneTransitionMutation.java      |  65 +++++++++
 .../mutation/RandomMutation.java              |  70 ++++-----
 .../mutation/RelationMutation.java            |  85 +++++------
 .../mutation/ResetTimerMutation.java          |  12 ++
 .../mutation/RmActionMutation.java            |  22 +--
 .../mutation/RmActionOnSignalMutation.java    |  18 ++-
 .../mutation/RmAssociationMutation.java       |   7 +-
 .../mutation/RmAttributeMutation.java         |   7 +-
 .../mutation/RmBlockMutation.java             |   9 +-
 .../mutation/RmExpireTimerMutation.java       |   9 +-
 .../mutation/RmMethodMutation.java            |   6 +-
 .../mutation/RmRandomMutation.java            |  16 ++-
 .../mutation/RmRelationMutation.java          |   6 +-
 .../mutation/RmResetTimerMutation.java        |   9 +-
 .../mutation/RmSetTimerMutation.java          |   9 +-
 .../mutation/RmSignalMutation.java            |   6 +-
 .../mutation/RmStateMutation.java             |   7 +-
 .../mutation/RmTransitionMutation.java        |   9 +-
 .../mutation/SetTimerMutation.java            |  23 ++-
 .../mutation/SignalMutation.java              |  19 ++-
 .../mutation/StateMachineElementMutation.java |  40 +-----
 .../mutation/StateMutation.java               |  18 ++-
 .../mutation/SwapActionMutation.java          |  26 ++--
 .../mutation/TimerOperatorMutation.java       |  43 +++---
 .../mutation/TransitionMutation.java          | 134 ++++++++++--------
 .../mutation/UnnamedElementMutation.java      |   2 -
 .../UnnamedStateMachineElementMutation.java   | 121 ++++++++++++++++
 64 files changed, 1105 insertions(+), 515 deletions(-)
 rename src/main/java/avatartranslator/mutation/{BlockStructMutation.java => BlockElementMutation.java} (81%)
 create mode 100644 src/main/java/avatartranslator/mutation/NoneActionOnSignalMutation.java
 create mode 100644 src/main/java/avatartranslator/mutation/NoneRandomMutation.java
 create mode 100644 src/main/java/avatartranslator/mutation/NoneRelationMutation.java
 create mode 100644 src/main/java/avatartranslator/mutation/NoneTransitionMutation.java
 create mode 100644 src/main/java/avatartranslator/mutation/UnnamedStateMachineElementMutation.java

diff --git a/src/main/java/avatartranslator/mutation/ActionMutation.java b/src/main/java/avatartranslator/mutation/ActionMutation.java
index 26b339ea4f..fc0c706188 100644
--- a/src/main/java/avatartranslator/mutation/ActionMutation.java
+++ b/src/main/java/avatartranslator/mutation/ActionMutation.java
@@ -51,41 +51,71 @@ import avatartranslator.*;
 
 public abstract class ActionMutation extends TransitionMutation {
 
+    public ActionMutation(String _blockName, String _fromString, int _fromType, String _toString, int _toType, String _actionString) {
+        super(_blockName, _fromString, _fromType, _toString, _toType);
+        setActionString(_actionString);
+    }
+
+    public ActionMutation(String _blockName, String _fromString, int _fromType, String _toString, int _toType, int _index) {
+        super(_blockName, _fromString, _fromType, _toString, _toType);
+        setIndex(_index);
+    }
+
+    public ActionMutation(String _blockName, String _fromString, int _fromType, String _toString, int _toType, String _actionString, int _index) {
+        this(_blockName, _fromString, _fromType, _toString, _toType, _actionString);
+        setIndex(_index);
+    }
+
+    public ActionMutation(String _blockName, String _transitionString, int _transitionType, String _actionString) {
+        super(_blockName, _transitionString, _transitionType);
+        setActionString(_actionString);
+    }
+
+    public ActionMutation(String _blockName, String _transitionString, int _transitionType, int _index) {
+        super(_blockName, _transitionString, _transitionType);
+        setIndex(_index);
+    }
+
+    public ActionMutation(String _blockName, String _transitionString, int _transitionType, String _actionString, int _index) {
+        this(_blockName, _transitionString, _transitionType, _actionString);
+        setIndex(_index);
+    }
+
     private String actionString;
 
     private int index = -1;
 
-    public String getActionString() {
+    protected String getActionString() {
         return actionString;
     }
 
-    public int getIndex() {
+    protected int getIndex() {
         return index;
     }
 
-    public int getIndex(AvatarSpecification _avspec) {
+    protected int getIndex(AvatarSpecification _avspec) {
         if (index == -1)
             index = getIndexFromString(_avspec);
         return index;
     }
 
-    public int getIndexFromString(AvatarSpecification _avspec) {
+    protected int getIndexFromString(AvatarSpecification _avspec) {
         AvatarTransition trans = super.getElement(_avspec);
         AvatarBlock block = getBlock(_avspec);
         int len = trans.getNbOfAction();
         for (int i = 0; i < len; i++) {
-            if(trans.getAction(i).toString().equals(AvatarTerm.createFromString(block, getActionString()).toString())) {
+            if (trans.getAction(i).toString().equals(AvatarTerm.createFromString(block, getActionString()).toString())) {
                 return i;
             }
         }
         return -1;
     }
 
-    public void setActionString(String _actionString) {
+    private void setActionString(String _actionString) {
         actionString = _actionString;
     }
 
-    public void setIndex(int _index) {
+    private void setIndex(int _index) {
         index = _index;
     }
 
diff --git a/src/main/java/avatartranslator/mutation/ActionOnSignalMutation.java b/src/main/java/avatartranslator/mutation/ActionOnSignalMutation.java
index 8a1ff21409..3683a1ad78 100644
--- a/src/main/java/avatartranslator/mutation/ActionOnSignalMutation.java
+++ b/src/main/java/avatartranslator/mutation/ActionOnSignalMutation.java
@@ -52,10 +52,23 @@ import java.util.LinkedList;
  * @version 1.0 27/06/2022
  */
 
-public abstract class ActionOnSignalMutation extends StateMachineElementMutation {
+public abstract class ActionOnSignalMutation extends UnnamedStateMachineElementMutation {
 
-    private String name = "";
-    private int nameType = UNDEFINED_TYPE;
+    protected ActionOnSignalMutation(String _blockName, String _signalName) {
+        super(_blockName);
+        setSignalName(_signalName);
+        initValues();
+    }
+
+    protected ActionOnSignalMutation(String _blockName, String _name, int _nameType) {
+        super(_blockName, _name, _nameType);
+        initValues();
+    }
+
+    protected ActionOnSignalMutation(String _blockName, String _name, int _nameType, String _signalName) {
+        this(_blockName, _name, _nameType);
+        setSignalName(_signalName);
+    }
 
     private String signalName;
 
@@ -65,45 +78,23 @@ public abstract class ActionOnSignalMutation extends StateMachineElementMutation
 	private boolean checkLatency;
     private boolean checkLatencySet = false;
 
-    public String getName() {
-        return name;
-    }
-
-    public boolean isNameSet() {
-        return nameType != UNDEFINED_TYPE;
-    }
-
-    public int getNameType() {
-        return nameType;
-    }
-
-    public void setName(String _name) {
-        name = _name;
-        nameType = NAME_TYPE;
-    }
-
-    public void setUUID(String _uuid) {
-        name = _uuid;
-        nameType = UUID_TYPE;
-    }
-
-    public String getSignalName() {
+    protected String getSignalName() {
         return signalName;
     }
 
-    public void setSignalName(String _signalName) {
+    private void setSignalName(String _signalName) {
         signalName = _signalName;
     }
 
-    public List<String> getValues() {
+    protected List<String> getValues() {
         return values;
     }
 
-    public String getValue(int i) {
+    protected String getValue(int i) {
         return values.get(i);
     }
 
-    public boolean areValuesSet() {
+    protected boolean areValuesSet() {
         return valuesSet;
     }
 
@@ -117,15 +108,15 @@ public abstract class ActionOnSignalMutation extends StateMachineElementMutation
         valuesSet = true;
     }
 
-    public void initValues() {
+    private void initValues() {
         values = new LinkedList<>();
     }
 
-    public boolean getCheckLatency() {
+    protected boolean getCheckLatency() {
         return checkLatency;
     }
 
-    public boolean isCheckLatencySet() {
+    protected boolean isCheckLatencySet() {
         return checkLatencySet;
     }
 
@@ -134,6 +125,7 @@ public abstract class ActionOnSignalMutation extends StateMachineElementMutation
         checkLatencySet = true;
     }
 
+    @Override
     public AvatarActionOnSignal getElement(AvatarSpecification _avspec) {
         if (!isNameSet()) {
             //TraceManager.addDev("name not set");
@@ -161,9 +153,8 @@ public abstract class ActionOnSignalMutation extends StateMachineElementMutation
             }
             return null;
         }
-        AvatarStateMachineElement element = getElement(_avspec, getNameType(), getName());
+        AvatarStateMachineElement element = super.getElement(_avspec);
         if (element != null && element instanceof AvatarActionOnSignal) return (AvatarActionOnSignal)element;
         return null;
     }
-
 }
\ No newline at end of file
diff --git a/src/main/java/avatartranslator/mutation/AddActionMutation.java b/src/main/java/avatartranslator/mutation/AddActionMutation.java
index 3430669a65..de6f59a842 100644
--- a/src/main/java/avatartranslator/mutation/AddActionMutation.java
+++ b/src/main/java/avatartranslator/mutation/AddActionMutation.java
@@ -53,15 +53,20 @@ import avatartranslator.*;
 
 public class AddActionMutation extends ActionMutation implements AddMutation {
 
-    public AddActionMutation(String _blockName, String _actionString) {
-        setBlockName(_blockName);
-        setActionString(_actionString);
-        initActions();
+    public AddActionMutation(String _blockName, String _fromString, int _fromType, String _toString, int _toType, String _actionString) {
+        super(_blockName, _fromString, _fromType, _toString, _toType, _actionString);
     }
 
-    public AddActionMutation(String _blockName, String _actionString, int _index) {
-        this(_blockName, _actionString);
-        setIndex(_index);
+    public AddActionMutation(String _blockName, String _fromString, int _fromType, String _toString, int _toType, String _actionString, int _index) {
+        super(_blockName, _fromString, _fromType, _toString, _toType, _actionString, _index);
+    }
+
+    public AddActionMutation(String _blockName, String _transitionString, int _transitionType, String _actionString) {
+        super(_blockName, _transitionString, _transitionType, _actionString);
+    }
+
+    public AddActionMutation(String _blockName, String _transitionString, int _transitionType, String _actionString, int _index) {
+        super(_blockName, _transitionString, _transitionType, _actionString, _index);
     }
 
     public AvatarElement createElement(AvatarSpecification _avspec) {
diff --git a/src/main/java/avatartranslator/mutation/AddActionOnSignalMutation.java b/src/main/java/avatartranslator/mutation/AddActionOnSignalMutation.java
index 2638997412..bb1e909a83 100644
--- a/src/main/java/avatartranslator/mutation/AddActionOnSignalMutation.java
+++ b/src/main/java/avatartranslator/mutation/AddActionOnSignalMutation.java
@@ -51,10 +51,12 @@ public class AddActionOnSignalMutation extends ActionOnSignalMutation implements
 
     private boolean isGraphical = false;
 
-    public AddActionOnSignalMutation(String _signalName, String _block) {
-        setSignalName(_signalName);
-        setBlockName(_block);
-        initValues();
+    public AddActionOnSignalMutation(String _blockName, String _signalName) {
+        super(_blockName, _signalName);
+    }
+
+    public AddActionOnSignalMutation(String _blockName, String _name, String _signalName) {
+        super(_blockName, _name, NAME_TYPE, _signalName);
     }
 
     //todo : graphique
@@ -70,7 +72,8 @@ public class AddActionOnSignalMutation extends ActionOnSignalMutation implements
 
         return aaos;
     }
-
+    
+    @Override
     public void apply(AvatarSpecification _avspec) {
         AvatarActionOnSignal aaos = createElement(_avspec);
         AvatarStateMachine asm = getAvatarStateMachine(_avspec);
diff --git a/src/main/java/avatartranslator/mutation/AddAssociationMutation.java b/src/main/java/avatartranslator/mutation/AddAssociationMutation.java
index 5e6de25b87..8b062b9432 100644
--- a/src/main/java/avatartranslator/mutation/AddAssociationMutation.java
+++ b/src/main/java/avatartranslator/mutation/AddAssociationMutation.java
@@ -50,8 +50,11 @@ import avatartranslator.*;
 public class AddAssociationMutation extends AssociationMutation implements AddMutation{
 
     public AddAssociationMutation(String _block1, String _block2, String _signal1, String _signal2) {
-        setBlocks(_block1, _block2);
-        setSignals(_signal1, _signal2);
+        super(_block1, _block2, _signal1, _signal2);
+    }
+
+    public AddAssociationMutation(String _relationString, int _relationType, String _signal1, String _signal2) {
+        super(_relationString, _relationType, _signal1, _signal2);
     }
 
     public AvatarElement createElement(AvatarSpecification _avspec) {
diff --git a/src/main/java/avatartranslator/mutation/AddAttributeMutation.java b/src/main/java/avatartranslator/mutation/AddAttributeMutation.java
index 588edd7ef9..c7d8ff5929 100644
--- a/src/main/java/avatartranslator/mutation/AddAttributeMutation.java
+++ b/src/main/java/avatartranslator/mutation/AddAttributeMutation.java
@@ -50,10 +50,12 @@ import avatartranslator.*;
  */
 public class AddAttributeMutation extends AttributeMutation implements AddMutation {
 
-    public AddAttributeMutation(String _name, String _type, String _blockName) {
-        setType(_type);
-        setName(_name);
-        setBlockName(_blockName);
+    public AddAttributeMutation(String _blockName, String _attributeName, String _attributeType) {
+        super(_blockName, _attributeName, _attributeType);
+    }
+
+    public AddAttributeMutation(String _blockName, String _attributeName, String _attributeType, String _initialValue) {
+        super(_blockName, _attributeName, _attributeType, _initialValue);
     }
 
     public AvatarAttribute createElement(AvatarSpecification _avspec) {
diff --git a/src/main/java/avatartranslator/mutation/AddBlockMutation.java b/src/main/java/avatartranslator/mutation/AddBlockMutation.java
index 282c42218b..b1886502d0 100644
--- a/src/main/java/avatartranslator/mutation/AddBlockMutation.java
+++ b/src/main/java/avatartranslator/mutation/AddBlockMutation.java
@@ -47,12 +47,12 @@ import avatartranslator.*;
  * @version 1.0 23/06/2022
  */
 
-public class AddBlockMutation extends BlockStructMutation implements AddMutation {
+public class AddBlockMutation extends BlockElementMutation implements AddMutation {
 
     private boolean isGraphical = false;
     
     public AddBlockMutation(String _blockName) {
-        setBlockName(_blockName);
+        super(_blockName);
     }
 
     //todo : graphic
diff --git a/src/main/java/avatartranslator/mutation/AddExpireTimerMutation.java b/src/main/java/avatartranslator/mutation/AddExpireTimerMutation.java
index c24a04694f..8038aac210 100644
--- a/src/main/java/avatartranslator/mutation/AddExpireTimerMutation.java
+++ b/src/main/java/avatartranslator/mutation/AddExpireTimerMutation.java
@@ -52,9 +52,12 @@ public class AddExpireTimerMutation extends ExpireTimerMutation implements AddMu
 
     private boolean isGraphical = false;
 
-    public AddExpireTimerMutation(String _timerName, String _block) {
-        setTimerName(_timerName);
-        setBlockName(_block);
+    public AddExpireTimerMutation(String _blockName, String _timerName) {
+        super(_blockName, _timerName);
+    }
+
+    public AddExpireTimerMutation(String _blockName, String _name, String _timerName) {
+        super(_blockName, _name, NAME_TYPE, _timerName);
     }
 
     //todo : graphique
diff --git a/src/main/java/avatartranslator/mutation/AddMethodMutation.java b/src/main/java/avatartranslator/mutation/AddMethodMutation.java
index 2d63f2b8cd..1052b6f006 100644
--- a/src/main/java/avatartranslator/mutation/AddMethodMutation.java
+++ b/src/main/java/avatartranslator/mutation/AddMethodMutation.java
@@ -49,20 +49,17 @@ import avatartranslator.*;
  */
 public class AddMethodMutation extends MethodMutation implements AddMutation {
 
-    public AddMethodMutation(String _name, String _blockName, boolean _imp) {
-        setName(_name);
-        setBlockName(_blockName);
-        initParameters();
-        setImplementationProvided(_imp);
+    public AddMethodMutation(String _blockName, String _methodName, boolean _imp) {
+        super(_blockName, _methodName, _imp);
     }
 
-    public AddMethodMutation(String _name, String _blockName) {
-       this(_name, _blockName, false);
+    public AddMethodMutation(String _blockName, String _methodName) {
+        super(_blockName, _methodName);
     }
 
     public AvatarMethod createElement(AvatarSpecification _avspec) {
         AvatarBlock block = getBlock(_avspec);
-        AvatarMethod am = new AvatarMethod(getName(), null);
+        AvatarMethod am = new AvatarMethod(getMethodName(), null);
         for (String s : getReturnParameters()) {
             AvatarAttribute aa = new AvatarAttribute("", AvatarType.getType(s), block, null);
             am.addReturnParameter(aa);
diff --git a/src/main/java/avatartranslator/mutation/AddMutation.java b/src/main/java/avatartranslator/mutation/AddMutation.java
index caf3b96278..532f0e6135 100644
--- a/src/main/java/avatartranslator/mutation/AddMutation.java
+++ b/src/main/java/avatartranslator/mutation/AddMutation.java
@@ -49,6 +49,6 @@ import avatartranslator.*;
  */
 public interface AddMutation {
 
-    AvatarElement createElement(AvatarSpecification _avspec);
+    public AvatarElement createElement(AvatarSpecification _avspec);
 
 }
\ No newline at end of file
diff --git a/src/main/java/avatartranslator/mutation/AddRandomMutation.java b/src/main/java/avatartranslator/mutation/AddRandomMutation.java
index 48b55f7a3d..c632ff4043 100644
--- a/src/main/java/avatartranslator/mutation/AddRandomMutation.java
+++ b/src/main/java/avatartranslator/mutation/AddRandomMutation.java
@@ -52,15 +52,18 @@ public class AddRandomMutation extends RandomMutation implements AddMutation {
 
     boolean isGraphical = false;
 
-    public AddRandomMutation(String _variable, String _blockName) {
-        setVariable(_variable);
-        setBlockName(_blockName);
+    public AddRandomMutation(String _blockName, String _attributeName) {
+        super(_blockName, _attributeName);
+    }
+
+    public AddRandomMutation(String _blockName, String _name, String _attributeName) {
+        super(_blockName, _name, NAME_TYPE, _attributeName);
     }
     
     //todo : add Graphical referenceObject
     public AvatarRandom createElement(AvatarSpecification _avspec) {
         AvatarRandom rand = new AvatarRandom(getName(), null);
-        rand.setVariable(getVariable());
+        rand.setVariable(getAttributeName());
         if(areValuesSet()) rand.setValues(getMinValue(), getMaxValue());
         if(isFunctionSet()) {
             rand.setFunctionId(getFunctionId());
diff --git a/src/main/java/avatartranslator/mutation/AddRelationMutation.java b/src/main/java/avatartranslator/mutation/AddRelationMutation.java
index a71ec70d93..555168a60d 100644
--- a/src/main/java/avatartranslator/mutation/AddRelationMutation.java
+++ b/src/main/java/avatartranslator/mutation/AddRelationMutation.java
@@ -52,7 +52,7 @@ public class AddRelationMutation extends RelationMutation implements AddMutation
     private boolean isGraphic = false;
 
     public AddRelationMutation(String _block1, String _block2) {
-        setBlocks(_block1, _block2);
+        super(_block1, _block2);
     }
     
     //todo : graphic
diff --git a/src/main/java/avatartranslator/mutation/AddResetTimerMutation.java b/src/main/java/avatartranslator/mutation/AddResetTimerMutation.java
index 5e40f51914..7ccbb71d31 100644
--- a/src/main/java/avatartranslator/mutation/AddResetTimerMutation.java
+++ b/src/main/java/avatartranslator/mutation/AddResetTimerMutation.java
@@ -51,9 +51,12 @@ public class AddResetTimerMutation extends ResetTimerMutation implements AddMuta
 
     private boolean isGraphical = false;
 
-    public AddResetTimerMutation(String _timerName, String _block) {
-        setTimerName(_timerName);
-        setBlockName(_block);
+    public AddResetTimerMutation(String _blockName, String _timerName) {
+        super(_blockName, _timerName);
+    }
+
+    public AddResetTimerMutation(String _blockName, String _name, String _timerName) {
+        super(_blockName, _name, NAME_TYPE, _timerName);
     }
 
     //todo : graphique
diff --git a/src/main/java/avatartranslator/mutation/AddSetTimerMutation.java b/src/main/java/avatartranslator/mutation/AddSetTimerMutation.java
index d9417b4964..870b47d18c 100644
--- a/src/main/java/avatartranslator/mutation/AddSetTimerMutation.java
+++ b/src/main/java/avatartranslator/mutation/AddSetTimerMutation.java
@@ -51,10 +51,12 @@ public class AddSetTimerMutation extends SetTimerMutation implements AddMutation
 
     private boolean isGraphical = false;
 
-    public AddSetTimerMutation(String _timerName, String _timerValue, String _block) {
-        setTimerName(_timerName);
-        setTimerValue(_timerValue);
-        setBlockName(_block);
+    public AddSetTimerMutation(String _blockName, String _timerName, String _timerValue) {
+        super(_blockName, _timerName, _timerValue);
+    }
+
+    public AddSetTimerMutation(String _blockName, String _name, String _timerName, String _timerValue) {
+        super(_blockName, _name, NAME_TYPE, _timerName, _timerValue);
     }
 
     //todo : graphique
diff --git a/src/main/java/avatartranslator/mutation/AddSignalMutation.java b/src/main/java/avatartranslator/mutation/AddSignalMutation.java
index 24d0831587..38e3e3fba6 100644
--- a/src/main/java/avatartranslator/mutation/AddSignalMutation.java
+++ b/src/main/java/avatartranslator/mutation/AddSignalMutation.java
@@ -49,16 +49,13 @@ import avatartranslator.*;
  */
 public class AddSignalMutation extends SignalMutation implements AddMutation {
 
-    public AddSignalMutation(String _name, String _blockName, int _inout) {
-        setName(_name);
-        setBlockName(_blockName);
-        setInOut(_inout);
-        initParameters();
+    public AddSignalMutation(String _blockName, String _signalName, int _inout) {
+        super(_blockName, _signalName, _inout);
     }
     
     public AvatarSignal createElement(AvatarSpecification _avspec) {
         AvatarBlock block = getBlock(_avspec);
-        AvatarSignal as = new AvatarSignal(getName(), getInOut(), null);
+        AvatarSignal as = new AvatarSignal(getSignalName(), getInOut(), null);
         for (String[] s : getParameters()) {
             AvatarAttribute aa = new AvatarAttribute(s[1], AvatarType.getType(s[0]), block, null);
             as.addParameter(aa);
diff --git a/src/main/java/avatartranslator/mutation/AddStateMutation.java b/src/main/java/avatartranslator/mutation/AddStateMutation.java
index 96cdd2e6fc..99ce7e90f4 100644
--- a/src/main/java/avatartranslator/mutation/AddStateMutation.java
+++ b/src/main/java/avatartranslator/mutation/AddStateMutation.java
@@ -50,16 +50,15 @@ import avatartranslator.*;
 
 public class AddStateMutation extends StateMutation implements AddMutation {
 
-    public AddStateMutation(String _name, String _blockName) {
-        setName(_name);
-        setBlockName(_blockName);
+    public AddStateMutation(String _blockName, String _stateName) {
+        super(_blockName, _stateName);
     }
 
     //todo : add Graphical referenceObject
     private boolean isGraphical = false;
     
     public AvatarState createElement() {
-        AvatarState state = new AvatarState(getName(), null);
+        AvatarState state = new AvatarState(getStateName(), null);
         return state;
 
     }
diff --git a/src/main/java/avatartranslator/mutation/AddTransitionMutation.java b/src/main/java/avatartranslator/mutation/AddTransitionMutation.java
index d7496d159a..21171cae39 100644
--- a/src/main/java/avatartranslator/mutation/AddTransitionMutation.java
+++ b/src/main/java/avatartranslator/mutation/AddTransitionMutation.java
@@ -54,9 +54,12 @@ public class AddTransitionMutation extends TransitionMutation implements AddMuta
 
     boolean isGraphical = false;
 
-    public AddTransitionMutation(String _blockName) {
-        setBlockName(_blockName);
-        initActions();
+    public AddTransitionMutation(String _blockName, String _fromString, int _fromType, String _toString, int _toType) {
+        super(_blockName, _fromString, _fromType, _toString, _toType);
+    }
+
+    public AddTransitionMutation(String _blockName, String _fromString, int _fromType, String _toString, int _toType, String _transitionName) {
+        super(_blockName, _fromString, _fromType, _toString, _toType, _transitionName, NAME_TYPE);
     }
     
     //todo : add Graphical referenceObject
diff --git a/src/main/java/avatartranslator/mutation/AssociationMutation.java b/src/main/java/avatartranslator/mutation/AssociationMutation.java
index 8a4eb8b1a1..1d2d306382 100644
--- a/src/main/java/avatartranslator/mutation/AssociationMutation.java
+++ b/src/main/java/avatartranslator/mutation/AssociationMutation.java
@@ -49,10 +49,20 @@ import avatartranslator.*;
  */
 public abstract class AssociationMutation extends RelationMutation {
 
+    protected AssociationMutation(String _block1, String _block2, String _signal1, String _signal2) {
+        super(_block1, _block2);
+        setSignals(_signal1, _signal2);
+    }
+
+    public AssociationMutation(String _relationString, int _relationType, String _signal1, String _signal2) {
+        super(_relationString, _relationType);
+        setSignals(_signal1, _signal2);
+    }
+
     private String signal1;
     private String signal2;
 
-    public AvatarSignal getSignal(AvatarSpecification _avspec, String _signal) {
+    protected AvatarSignal getSignal(AvatarSpecification _avspec, String _signal) {
         AvatarBlock block = getBlock1(_avspec);
         AvatarSignal signal = block.getSignalByName(_signal);
         if (signal == null) {
@@ -62,23 +72,23 @@ public abstract class AssociationMutation extends RelationMutation {
         return signal;
     }
 
-    public String getSignal1() {
+    protected String getSignal1() {
         return signal1;
     }
 
-    public AvatarSignal getSignal1(AvatarSpecification _avspec) {
+    protected AvatarSignal getSignal1(AvatarSpecification _avspec) {
         return getSignal(_avspec, getSignal1());
     }
 
-    public String getSignal2() {
+    protected String getSignal2() {
         return signal2;
     }
 
-    public AvatarSignal getSignal2(AvatarSpecification _avspec) {
+    protected AvatarSignal getSignal2(AvatarSpecification _avspec) {
         return getSignal(_avspec, getSignal2());
     }
 
-    public void setSignals(String _signal1, String _signal2) {
+    private void setSignals(String _signal1, String _signal2) {
         signal1 = _signal1;
         signal2 = _signal2;
     }
diff --git a/src/main/java/avatartranslator/mutation/AttributeMutation.java b/src/main/java/avatartranslator/mutation/AttributeMutation.java
index 90cf1d9a95..d4cbfd153b 100644
--- a/src/main/java/avatartranslator/mutation/AttributeMutation.java
+++ b/src/main/java/avatartranslator/mutation/AttributeMutation.java
@@ -47,33 +47,50 @@ import avatartranslator.*;
  * @author Léon FRENOT
  * @version 1.0 23/06/2022
  */
-public abstract class AttributeMutation extends BlockStructMutation {
+public abstract class AttributeMutation extends BlockElementMutation {
 
-    private String type;
+    public AttributeMutation(String _blockName, String _attributeName) {
+        super(_blockName);
+        setAttributeName(_attributeName);
 
-    private String name;
+    }
+
+    public AttributeMutation(String _blockName, String _attributeName, String _attributeType) {
+        super(_blockName);
+        setAttributeName(_attributeName);
+        setAttributeType(_attributeType);
+    }
+
+    public AttributeMutation(String _blockName, String _attributeName, String _attributeType, String _initialValue) {
+        this(_blockName, _attributeName, _attributeType);
+        setInitialValue(_initialValue);
+    }
+
+    private String attributeType;
+
+    private String attributeName;
 
     private String initialValue;
 
     private Boolean hasInitialValue = false;
 
-    public void setName(String _name) {
-        name = _name;
+    protected void setAttributeName(String _name) {
+        attributeName = _name;
     }
 
     public String getName() {
-        return name;
+        return attributeName;
     }
 
-    public void setType(String _type) {
-        type = _type;
+    protected void setAttributeType(String _type) {
+        attributeType = _type;
     }
 
     public AvatarType getType() {
-        return AvatarType.getType(type);
+        return AvatarType.getType(attributeType);
     }
 
-    public void setInitialValue(String _initialValue) {
+    protected void setInitialValue(String _initialValue) {
         hasInitialValue = true;
         initialValue = _initialValue;
     }
diff --git a/src/main/java/avatartranslator/mutation/AvatarMutation.java b/src/main/java/avatartranslator/mutation/AvatarMutation.java
index 6acddb465f..55a3729b6c 100644
--- a/src/main/java/avatartranslator/mutation/AvatarMutation.java
+++ b/src/main/java/avatartranslator/mutation/AvatarMutation.java
@@ -49,7 +49,9 @@ import avatartranslator.*;
  */
 public abstract class AvatarMutation {
 
-    public AvatarBlock getBlock(AvatarSpecification _avspec, String _block) {
+    protected AvatarMutation() {}
+
+    protected AvatarBlock getBlock(AvatarSpecification _avspec, String _block) {
         return _avspec.getBlockWithName(_block);
     }
 
diff --git a/src/main/java/avatartranslator/mutation/BlockStructMutation.java b/src/main/java/avatartranslator/mutation/BlockElementMutation.java
similarity index 81%
rename from src/main/java/avatartranslator/mutation/BlockStructMutation.java
rename to src/main/java/avatartranslator/mutation/BlockElementMutation.java
index 524b415ef2..b6a92c8b4f 100644
--- a/src/main/java/avatartranslator/mutation/BlockStructMutation.java
+++ b/src/main/java/avatartranslator/mutation/BlockElementMutation.java
@@ -46,33 +46,38 @@ import avatartranslator.*;
  * @author Léon FRENOT
  * @version 1.0 23/06/2022
  */
-public abstract class BlockStructMutation extends AvatarMutation {
+public abstract class BlockElementMutation extends AvatarMutation {
 
     private String blockName;
 
-    public void setBlockName(String _blockName) {
+    protected BlockElementMutation(String _blockName) {
+        super();
+        setBlockName(_blockName);
+    }
+
+    private void setBlockName(String _blockName) {
         blockName = _blockName;
     }
 
-    public AvatarBlock getBlock(AvatarSpecification _avspec) {
+    protected AvatarBlock getBlock(AvatarSpecification _avspec) {
         return _avspec.getBlockWithName(blockName);
     }
 
-    public String getBlockName() {
+    protected String getBlockName() {
         return blockName;
     }
 
-    public AvatarAttribute getAttribute(AvatarSpecification _avspec, String _name) {
+    protected AvatarAttribute getAttribute(AvatarSpecification _avspec, String _name) {
         AvatarBlock block = getBlock(_avspec);
         return block.getAvatarAttributeWithName(_name);
     }
 
-    public AvatarMethod getMethod(AvatarSpecification _avspec, String _name) {
+    protected AvatarMethod getMethod(AvatarSpecification _avspec, String _name) {
         AvatarBlock block = getBlock(_avspec);
         return block.getAvatarMethodWithName(_name);
     }
 
-    public AvatarSignal getSignal(AvatarSpecification _avspec, String _name) {
+    protected AvatarSignal getSignal(AvatarSpecification _avspec, String _name) {
         AvatarBlock block = getBlock(_avspec);
         return block.getAvatarSignalWithName(_name);
     }
diff --git a/src/main/java/avatartranslator/mutation/ExpireTimerMutation.java b/src/main/java/avatartranslator/mutation/ExpireTimerMutation.java
index 23af59db26..c7e766c533 100644
--- a/src/main/java/avatartranslator/mutation/ExpireTimerMutation.java
+++ b/src/main/java/avatartranslator/mutation/ExpireTimerMutation.java
@@ -51,6 +51,18 @@ import java.util.List;
  */
 public abstract class ExpireTimerMutation extends TimerOperatorMutation {
 
+    protected ExpireTimerMutation(String _blockName, String _timerName) {
+        super(_blockName, _timerName);
+    }
+
+    protected ExpireTimerMutation(String _blockName, String _name, int _nameType) {
+        super(_blockName, _name, _nameType);
+    }
+
+    protected ExpireTimerMutation(String _blockName, String _name, int _nameType, String _timerName) {
+        super(_blockName, _name, _nameType, _timerName);
+    }
+
     @Override
     public AvatarExpireTimer getElement(AvatarSpecification _avspec) {
         if (isNameSet())
diff --git a/src/main/java/avatartranslator/mutation/MdActionMutation.java b/src/main/java/avatartranslator/mutation/MdActionMutation.java
index 71e15d80a7..766024addb 100644
--- a/src/main/java/avatartranslator/mutation/MdActionMutation.java
+++ b/src/main/java/avatartranslator/mutation/MdActionMutation.java
@@ -53,11 +53,12 @@ import avatartranslator.*;
 
 public class MdActionMutation extends ActionMutation implements MdMutation {
 
-    public MdActionMutation(String _blockName, String _actionString, int _index) {
-        setBlockName(_blockName);
-        setActionString(_actionString);
-        setIndex(_index);
-        initActions();
+    public MdActionMutation(String _blockName, String _fromString, int _fromType, String _toString, int _toType, String _actionString, int _index) {
+        super(_blockName, _fromString, _fromType, _toString, _toType, _actionString, _index);
+    }
+
+    public MdActionMutation(String _blockName, String _transitionString, int _transitionType, String _actionString, int _index) {
+        super(_blockName, _transitionString, _transitionType, _actionString, _index);
     }
 
     public void apply(AvatarSpecification _avspec) {
diff --git a/src/main/java/avatartranslator/mutation/MdActionOnSignalMutation.java b/src/main/java/avatartranslator/mutation/MdActionOnSignalMutation.java
index 2243ed5313..2b5d711035 100644
--- a/src/main/java/avatartranslator/mutation/MdActionOnSignalMutation.java
+++ b/src/main/java/avatartranslator/mutation/MdActionOnSignalMutation.java
@@ -39,9 +39,10 @@
 package avatartranslator.mutation;
 
 import avatartranslator.*;
+import myutil.TraceManager;
 
 /**
- * Class MdRandomMutation
+ * Class MdActionOnSignalMutation
  * Creation: 28/06/2022
  *
  * @author Léon FRENOT
@@ -54,26 +55,26 @@ public class MdActionOnSignalMutation extends ActionOnSignalMutation implements
 
     private boolean signalNameChanged = false;
 
-    public MdActionOnSignalMutation(String _signalName, String _block) {
-        setSignalName(_signalName);
-        setBlockName(_block);
-        initValues();
-        current = new RmActionOnSignalMutation(_signalName, _block);
+    public MdActionOnSignalMutation(String _blockName, String _signalName) {
+        super(_blockName, _signalName);
+        current = new NoneActionOnSignalMutation(_blockName, _signalName);
     }
 
-    @Override
-    public void setName(String _name) {
-        current.setName(_name);
-        super.setName(_name);
-    }
-
-    public void setCurrentSignalName(String _signalName) {
-        current.setSignalName(_signalName);
+    public MdActionOnSignalMutation(String _blockName, String _signalName, String _newSignalName) {
+        super(_blockName, _newSignalName);
+        current = new NoneActionOnSignalMutation(_blockName, _signalName);
         signalNameChanged = true;
     }
+    
+    public MdActionOnSignalMutation(String _blockName, String _name, int _nameType) {
+        super(_blockName, _name, _nameType);
+        current = new NoneActionOnSignalMutation(_blockName, _name, _nameType);
+    }
 
-    public void setCurrentUUID(String _uuid) {
-        current.setUUID(_uuid);
+    public MdActionOnSignalMutation(String _blockName, String _name, int _nameType, String _newSignalName) {
+        super(_blockName, _newSignalName);
+        current = new NoneActionOnSignalMutation(_blockName, _name, _nameType);
+        signalNameChanged = true;
     }
 
     public void noCurrentValues() {
@@ -88,9 +89,15 @@ public class MdActionOnSignalMutation extends ActionOnSignalMutation implements
         current.setCheckLatency(b);
     }
 
+    @Override
     public void apply(AvatarSpecification _avspec) {
         AvatarActionOnSignal aaos = current.getElement(_avspec);
 
+        if(aaos == null) {
+            TraceManager.addDev("unknown ActionOnSignal");
+            return;
+        }
+
         if(signalNameChanged) {
             AvatarSignal signal = getSignal(_avspec, this.getSignalName());
             aaos.setSignal(signal);
diff --git a/src/main/java/avatartranslator/mutation/MdAttributeMutation.java b/src/main/java/avatartranslator/mutation/MdAttributeMutation.java
index a4ec6996ba..24dc1e472a 100644
--- a/src/main/java/avatartranslator/mutation/MdAttributeMutation.java
+++ b/src/main/java/avatartranslator/mutation/MdAttributeMutation.java
@@ -51,10 +51,9 @@ import myutil.TraceManager;
  */
 public class MdAttributeMutation extends AttributeMutation implements MdMutation {
 
-    public MdAttributeMutation(String _name, String _initialValue, String _blockName) {
-        setName(_name);
+    public MdAttributeMutation(String _blockName, String _attributeName, String _initialValue){
+        super(_blockName, _attributeName);
         setInitialValue(_initialValue);
-        setBlockName(_blockName);
     }
 
     public void apply(AvatarSpecification _avspec) {
diff --git a/src/main/java/avatartranslator/mutation/MdExpireTimerMutation.java b/src/main/java/avatartranslator/mutation/MdExpireTimerMutation.java
index 461be95970..5cafb76c48 100644
--- a/src/main/java/avatartranslator/mutation/MdExpireTimerMutation.java
+++ b/src/main/java/avatartranslator/mutation/MdExpireTimerMutation.java
@@ -51,9 +51,13 @@ public class MdExpireTimerMutation extends ExpireTimerMutation implements MdMuta
 
     private String newTimerName;
     
-    public MdExpireTimerMutation(String _timerName, String _newTimerName, String _block) {
-        setTimerName(_timerName);
-        setBlockName(_block);
+    public MdExpireTimerMutation(String _blockName, String _currentTimerName, String _newTimerName) {
+        super(_blockName, _currentTimerName);
+        newTimerName = _newTimerName;
+    }
+
+    public MdExpireTimerMutation(String _blockName, String _name, int _nameType, String _timerName, String _newTimerName) {
+        super(_blockName, _name, _nameType, _timerName);
         newTimerName = _newTimerName;
     }
 
diff --git a/src/main/java/avatartranslator/mutation/MdMethodMutation.java b/src/main/java/avatartranslator/mutation/MdMethodMutation.java
index defa4edd18..e07d3f4a3a 100644
--- a/src/main/java/avatartranslator/mutation/MdMethodMutation.java
+++ b/src/main/java/avatartranslator/mutation/MdMethodMutation.java
@@ -38,6 +38,8 @@
 
 package avatartranslator.mutation;
 
+import java.util.List;
+
 import avatartranslator.*;
 
 import myutil.TraceManager;
@@ -55,10 +57,8 @@ public class MdMethodMutation extends MethodMutation implements MdMutation {
     private boolean returnParametersChanged = false;
     private boolean parametersChanged = false;
 
-    public MdMethodMutation(String _name, String _blockName) {
-        setName(_name);
-        setBlockName(_blockName);
-        initParameters();
+    public MdMethodMutation(String _blockName, String _methodName) {
+        super(_blockName, _methodName);
     }
 
     public MdMethodMutation(String _name, String _blockName, boolean _imp) {
@@ -79,7 +79,7 @@ public class MdMethodMutation extends MethodMutation implements MdMutation {
     }
 
     @Override
-    public void setImplementationProvided(boolean _imp) {
+    protected void setImplementationProvided(boolean _imp) {
         implementationChanged = true;
         super.setImplementationProvided(_imp);
     }
@@ -93,6 +93,12 @@ public class MdMethodMutation extends MethodMutation implements MdMutation {
             return;
         }
 
+        List<AvatarMethod> meth = block.getMethods();
+        if (!meth.contains(am)) {
+            TraceManager.addDev("Method is from a super-bloc");
+            return;
+        }
+
         if (implementationChanged) {
             am.setImplementationProvided(isImplementationProvided());
         }
diff --git a/src/main/java/avatartranslator/mutation/MdRandomMutation.java b/src/main/java/avatartranslator/mutation/MdRandomMutation.java
index 20e8980640..2dc07290b6 100644
--- a/src/main/java/avatartranslator/mutation/MdRandomMutation.java
+++ b/src/main/java/avatartranslator/mutation/MdRandomMutation.java
@@ -53,17 +53,28 @@ public class MdRandomMutation extends RandomMutation implements MdMutation {
 
     private RandomMutation current;
 
-    private boolean variableNameChange = false;
+    private boolean attributeNameChange = false;
 
-    public MdRandomMutation(String _variable, String _blockName) {
-        setBlockName(_blockName);
-        setVariable(_variable);
-        current = new RmRandomMutation(_variable, _blockName);
+    public MdRandomMutation(String _blockName, String _attributeName) {
+        super(_blockName, _attributeName);
+        current = new MdRandomMutation(_blockName, _attributeName);
     }
 
-    public void setCurrentVariable(String _variable) {
-        current.setVariable(_variable);
-        variableNameChange = true;
+    public MdRandomMutation(String _blockName, String _attributeName, String _newAttributeName) {
+        super(_blockName, _newAttributeName);
+        current = new MdRandomMutation(_blockName, _attributeName);
+        attributeNameChange = true;
+    }
+    
+    public MdRandomMutation(String _blockName, String _name, int _nameType) {
+        super(_blockName, _name, _nameType);
+        current = new MdRandomMutation(_blockName, _name, _nameType);
+    }
+
+    public MdRandomMutation(String _blockName, String _name, int _nameType, String _newAttributeName) {
+        super(_blockName, _newAttributeName);
+        current = new MdRandomMutation(_blockName, _name, _nameType);
+        attributeNameChange = true;
     }
 
     public void setCurrentValues(String _minValue, String _maxValue) {
@@ -84,18 +95,25 @@ public class MdRandomMutation extends RandomMutation implements MdMutation {
 
     @Override
     public AvatarRandom getElement(AvatarSpecification _avspec) {
+        AvatarRandom random = null;
         try {
-            return current.getElement(_avspec);
+            random = current.getElement(_avspec);
         } catch (Exception e) {
-            return super.getElement(_avspec);
         }
+        if (random == null) random = super.getElement(_avspec);
+        return random;
     }
 
     public void apply(AvatarSpecification _avspec) {
         AvatarRandom rand = current.getElement(_avspec);
 
-        if (variableNameChange)
-            rand.setVariable(this.getVariable());
+        if(rand == null) {
+            TraceManager.addDev("Unknown random operator");
+            return;
+        }
+
+        if (attributeNameChange)
+            rand.setVariable(this.getAttributeName());
 
         if (areValuesSet())
             rand.setValues(this.getMinValue(), this.getMaxValue());
diff --git a/src/main/java/avatartranslator/mutation/MdRelationMutation.java b/src/main/java/avatartranslator/mutation/MdRelationMutation.java
index 4bea56614a..99a350a8ab 100644
--- a/src/main/java/avatartranslator/mutation/MdRelationMutation.java
+++ b/src/main/java/avatartranslator/mutation/MdRelationMutation.java
@@ -52,20 +52,13 @@ public class MdRelationMutation extends RelationMutation implements MdMutation {
     private RelationMutation current;
     
     public MdRelationMutation(String _block1, String _block2) {
-        setBlocks(_block1, _block2);
-        current = new RmRelationMutation(_block1, _block2);
+        super(_block1, _block2);
+        current = new NoneRelationMutation(_block1, _block2);
     }
 
-    @Override
-    public void setName(String _name) {
-        current.setName(_name);
-        super.setName(_name);
-    }
-
-    @Override
-    public void setUUID(String _uuid) {
-        current.setUUID(_uuid);
-        super.setUUID(_uuid);
+    public MdRelationMutation(String _relationString, int _relationType) {
+        super(_relationString, _relationType);
+        current = new NoneRelationMutation(_relationString, _relationType);
     }
 
     public void setCurrentBlocking(boolean b) {
diff --git a/src/main/java/avatartranslator/mutation/MdResetTimerMutation.java b/src/main/java/avatartranslator/mutation/MdResetTimerMutation.java
index ce5ccdecb8..79152eba7b 100644
--- a/src/main/java/avatartranslator/mutation/MdResetTimerMutation.java
+++ b/src/main/java/avatartranslator/mutation/MdResetTimerMutation.java
@@ -51,9 +51,13 @@ public class MdResetTimerMutation extends ResetTimerMutation implements MdMutati
 
     private String newTimerName;
     
-    public MdResetTimerMutation(String _timerName, String _newTimerName, String _block) {
-        setTimerName(_timerName);
-        setBlockName(_block);
+    public MdResetTimerMutation(String _blockName, String _currentTimerName, String _newTimerName) {
+        super(_blockName, _currentTimerName);
+        newTimerName = _newTimerName;
+    }
+
+    public MdResetTimerMutation(String _blockName, String _name, int _nameType, String _timerName, String _newTimerName) {
+        super(_blockName, _name, _nameType, _timerName);
         newTimerName = _newTimerName;
     }
 
diff --git a/src/main/java/avatartranslator/mutation/MdSetTimerMutation.java b/src/main/java/avatartranslator/mutation/MdSetTimerMutation.java
index f4eb7930e5..0a7002d576 100644
--- a/src/main/java/avatartranslator/mutation/MdSetTimerMutation.java
+++ b/src/main/java/avatartranslator/mutation/MdSetTimerMutation.java
@@ -52,36 +52,44 @@ public class MdSetTimerMutation extends SetTimerMutation implements MdMutation {
     private String newTimerName;
     private boolean newTimerNameSet = false;
 
+    private String newTimerValue;
     private boolean newTimerValueSet = false;
     
-    public MdSetTimerMutation(String _timerName, String _newTimerName, String _timerValue, String _block) {
-        setTimerName(_timerName);
-        setBlockName(_block);
-        setTimerValue(_timerValue);
-        setNewTimerName(_newTimerName);
+    public MdSetTimerMutation(String _blockName, String _timerName, String _timerValue, String _newTimerValue) {
+        super(_blockName, _timerName, _timerValue);
+        setNewTimerValue(_newTimerValue);
     }
 
-    public MdSetTimerMutation(String _timerName, String _block) {
-        setTimerName(_timerName);
-        setBlockName(_block);
+    public MdSetTimerMutation(String _blockName, String _name, int _nameType, String _newTimerValue) {
+        super(_blockName, _name, _nameType);
+        setNewTimerValue(_newTimerValue);
     }
 
-    public void setNewTimerName(String _newTimerName) {
-        newTimerName = _newTimerName;
+    public MdSetTimerMutation(String _blockName, String _timerName, String _timerValue, String _newTimerName, String _newTimerValue) {
+        super(_blockName, _timerName, _timerValue);
+        setNewTimer(_newTimerName, _newTimerValue);
+    }
+
+    public MdSetTimerMutation(String _blockName, String _name, int _nameType, String _newTimerName, String _newTimerValue) {
+        super(_blockName, _name, _nameType);
+        setNewTimer(_newTimerName, _newTimerValue);
+    }
+
+    private void setNewTimerValue(String _newTimerValue) {
+        newTimerValue = _newTimerValue;
         newTimerNameSet = true;
     }
 
-    @Override
-    public void setTimerValue(String _timerValue) {
-        super.setTimerValue(_timerValue);
-        newTimerValueSet = true;
+    private void setNewTimer(String _newTimerName, String _newTimerValue) {
+        setNewTimerValue(_newTimerValue);
+        newTimerName = _newTimerName;
+        newTimerNameSet = true;
     }
-    
 
     public void apply(AvatarSpecification _avspec) {
         AvatarSetTimer elt = getElement(_avspec);
         AvatarAttribute newTimer = getAttribute(_avspec, newTimerName);
         if (newTimerNameSet) elt.setTimer(newTimer);
-        if (newTimerValueSet) elt.setTimerValue(getTimerValue());
+        if (newTimerValueSet) elt.setTimerValue(newTimerValue);
     }
 }
diff --git a/src/main/java/avatartranslator/mutation/MdSignalMutation.java b/src/main/java/avatartranslator/mutation/MdSignalMutation.java
index f324092eec..c282542051 100644
--- a/src/main/java/avatartranslator/mutation/MdSignalMutation.java
+++ b/src/main/java/avatartranslator/mutation/MdSignalMutation.java
@@ -38,6 +38,8 @@
 
 package avatartranslator.mutation;
 
+import java.util.List;
+
 import avatartranslator.*;
 
 import myutil.TraceManager;
@@ -54,10 +56,8 @@ public class MdSignalMutation extends SignalMutation implements MdMutation {
     private boolean inoutChanged = false;
     private boolean parametersChanged = false;
 
-    public MdSignalMutation(String _name, String _blockName) {
-        setName(_name);
-        setBlockName(_blockName);
-        initParameters();
+    public MdSignalMutation(String _blockName, String _signalName) {
+        super(_blockName, _signalName);
     }
 
     public MdSignalMutation(String _name, String _blockName, int _inout) {
@@ -72,7 +72,7 @@ public class MdSignalMutation extends SignalMutation implements MdMutation {
     }
 
     @Override
-    public void setInOut(int _inout) {
+    protected void setInOut(int _inout) {
         inoutChanged = true;
         super.setInOut(_inout);
     }
@@ -87,6 +87,13 @@ public class MdSignalMutation extends SignalMutation implements MdMutation {
             return;
         }
 
+        List<AvatarSignal> sign = block.getSignals();
+        if(!sign.contains(as)) {
+            TraceManager.addDev("Signal is from a super-bloc");
+            return;
+
+        }
+
         if (parametersChanged) {
             as.removeAttributes();
             for (String[] s : getParameters()) {
diff --git a/src/main/java/avatartranslator/mutation/MdTransitionMutation.java b/src/main/java/avatartranslator/mutation/MdTransitionMutation.java
index 5202c103bb..5cd57e3993 100644
--- a/src/main/java/avatartranslator/mutation/MdTransitionMutation.java
+++ b/src/main/java/avatartranslator/mutation/MdTransitionMutation.java
@@ -53,34 +53,24 @@ public class MdTransitionMutation extends TransitionMutation implements MdMutati
     
     private TransitionMutation current;
     
-    public MdTransitionMutation(String _blockName) {
-        setBlockName(_blockName);
-        initActions();
-        current = new RmTransitionMutation(_blockName);
+    public MdTransitionMutation(String _blockName, String _fromString, int _fromType, String _toString, int _toType) {
+        super(_blockName, _fromString, _fromType, _toString, _toType);
+        current = new NoneTransitionMutation(_blockName, _fromString, _fromType, _toString, _toType);
     }
 
-    public void setCurrentFromWithName(String _name) {
-        current.setFromWithName(_name);
+    public MdTransitionMutation(String _blockName, String _transitionString, int _transitionType) {
+        super(_blockName, _transitionString, _transitionType);
+        current = new NoneTransitionMutation(_blockName, _transitionString, _transitionType);
     }
 
-    public void setCurrentFromWithUUID(String _uuid) {
-        current.setFromWithUUID(_uuid);
+    public MdTransitionMutation(String _blockName, String _currentFromString, int _currentFromType, String _currentToString, int _currentToType, String _newFromString, int _newFromType, String _newToString, int _newToType) {
+        super(_blockName, _newFromString, _newFromType, _newToString, _newToType);
+        current = new NoneTransitionMutation(_blockName, _currentFromString, _currentFromType, _currentToString, _currentToType);
     }
 
-    public void setCurrentToWithName(String _name) {
-        current.setToWithName(_name);
-    }
-
-    public void setCurrentToWithUUID(String _uuid) {
-        current.setToWithUUID(_uuid);
-    }
-
-    public void setCurrentName(String _name) {
-        current.setName(_name);
-    }
-
-    public void setCurrentUUID(String _uuid) {
-        current.setUUID(_uuid);
+    public MdTransitionMutation(String _blockName, String _transitionString, int _transitionType, String _newFromString, int _newFromType, String _newToString, int _newToType) {
+        super(_blockName, _newFromString, _newFromType, _newToString, _newToType);
+        current = new NoneTransitionMutation(_blockName, _transitionString, _transitionType);
     }
 
     public void setCurrentProbablility(double _probability) {
diff --git a/src/main/java/avatartranslator/mutation/MethodMutation.java b/src/main/java/avatartranslator/mutation/MethodMutation.java
index 235472c61d..ea851a0af4 100644
--- a/src/main/java/avatartranslator/mutation/MethodMutation.java
+++ b/src/main/java/avatartranslator/mutation/MethodMutation.java
@@ -50,9 +50,20 @@ import java.util.LinkedList;
  * @version 1.0 24/06/2022
  */
 
-public abstract class MethodMutation extends BlockStructMutation {
+public abstract class MethodMutation extends BlockElementMutation {
 
-    private String name;
+    protected MethodMutation(String _blockName, String _methodName, boolean _imp) {
+        super(_blockName);
+        setMethodName(_methodName);
+        initParameters();
+        setImplementationProvided(_imp);
+    }
+
+    protected MethodMutation(String _blockName, String _methodName) {
+        this(_blockName, _methodName, false);
+    }
+
+    private String methodName;
 
     private boolean implementationProvided;
 
@@ -60,15 +71,15 @@ public abstract class MethodMutation extends BlockStructMutation {
 
     protected List<String[]> parameters;
 
-    public void setName(String _name) {
-        name = _name;
+    private void setMethodName(String _methodName) {
+        methodName = _methodName;
     }
 
-    public String getName() {
-        return name;
+    protected String getMethodName() {
+        return methodName;
     }
 
-    public void initParameters() {
+    private void initParameters() {
         returnParameters = new LinkedList<>();
         parameters = new LinkedList<>();
     }
@@ -77,7 +88,7 @@ public abstract class MethodMutation extends BlockStructMutation {
         returnParameters.add(_returnParameter);
     }
 
-    public List<String> getReturnParameters() {
+    protected List<String> getReturnParameters() {
         return returnParameters;
     }
 
@@ -85,19 +96,24 @@ public abstract class MethodMutation extends BlockStructMutation {
         parameters.add(_parameter);
     }
 
-    public List<String[]> getParameters() {
+    public void addParameter(String _attributeName, String _attributeType) {
+        String[] parameter = {_attributeName, _attributeType};
+        addParameter(parameter);
+    }
+
+    protected List<String[]> getParameters() {
         return parameters;
     }
 
-    public void setImplementationProvided(boolean _imp) {
+    protected void setImplementationProvided(boolean _imp) {
         implementationProvided = _imp;
     }
 
-    public boolean isImplementationProvided() {
+    protected boolean isImplementationProvided() {
         return implementationProvided;
     }
 
     public AvatarMethod getElement(AvatarSpecification _avspec) {
-        return getMethod(_avspec, getName());
+        return getMethod(_avspec, getMethodName());
     }
 }
\ No newline at end of file
diff --git a/src/main/java/avatartranslator/mutation/NoneActionOnSignalMutation.java b/src/main/java/avatartranslator/mutation/NoneActionOnSignalMutation.java
new file mode 100644
index 0000000000..6bcdf0c867
--- /dev/null
+++ b/src/main/java/avatartranslator/mutation/NoneActionOnSignalMutation.java
@@ -0,0 +1,72 @@
+/* Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Ludovic Apvrille
+ * 
+ * ludovic.apvrille AT enst.fr
+ * 
+ * This software is a computer program whose purpose is to allow the
+ * edition of TURTLE analysis, design and deployment diagrams, to
+ * allow the generation of RT-LOTOS or Java code from this diagram,
+ * and at last to allow the analysis of formal validation traces
+ * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP
+ * from INRIA Rhone-Alpes.
+ * 
+ * This software is governed by the CeCILL  license under French law and
+ * abiding by the rules of distribution of free software.  You can  use,
+ * modify and/ or redistribute the software under the terms of the CeCILL
+ * license as circulated by CEA, CNRS and INRIA at the following URL
+ * "http://www.cecill.info".
+ * 
+ * As a counterpart to the access to the source code and  rights to copy,
+ * modify and redistribute granted by the license, users are provided only
+ * with a limited warranty  and the software's author,  the holder of the
+ * economic rights,  and the successive licensors  have only  limited
+ * liability.
+ * 
+ * In this respect, the user's attention is drawn to the risks associated
+ * with loading,  using,  modifying and/or developing or reproducing the
+ * software by the user in light of its specific status of free software,
+ * that may mean  that it is complicated to manipulate,  and  that  also
+ * therefore means  that it is reserved for developers  and  experienced
+ * professionals having in-depth computer knowledge. Users are therefore
+ * encouraged to load and test the software's suitability as regards their
+ * requirements in conditions enabling the security of their systems and/or
+ * data to be ensured and,  more generally, to use and operate it in the
+ * same conditions as regards security.
+ * 
+ * The fact that you are presently reading this means that you have had
+ * knowledge of the CeCILL license and that you accept its terms.
+ */
+
+package avatartranslator.mutation;
+
+import avatartranslator.*;
+
+//import myutil.TraceManager;
+
+/**
+ * Class NoneActionOnSignalMutation
+ * Creation: 30/06/2022
+ *
+ * @author Léon FRENOT
+ * @version 1.0 30/06/2022
+ */
+
+public class NoneActionOnSignalMutation extends ActionOnSignalMutation {
+
+    protected NoneActionOnSignalMutation(String _blockName, String _signalName) {
+        super(_blockName, _signalName);
+    }
+
+    protected NoneActionOnSignalMutation(String _blockName, String _name, int _nameType) {
+        super(_blockName, _name, _nameType);
+    }
+
+    protected NoneActionOnSignalMutation(String _blockName, String _name, int _nameType, String _signalName) {
+        super(_blockName, _name, _nameType, _signalName);
+    }
+
+    public void apply(AvatarSpecification _avspec) {
+        return;
+    }
+
+    
+}
\ No newline at end of file
diff --git a/src/main/java/avatartranslator/mutation/NoneRandomMutation.java b/src/main/java/avatartranslator/mutation/NoneRandomMutation.java
new file mode 100644
index 0000000000..e5178359ab
--- /dev/null
+++ b/src/main/java/avatartranslator/mutation/NoneRandomMutation.java
@@ -0,0 +1,72 @@
+/* Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Ludovic Apvrille
+ * 
+ * ludovic.apvrille AT enst.fr
+ * 
+ * This software is a computer program whose purpose is to allow the
+ * edition of TURTLE analysis, design and deployment diagrams, to
+ * allow the generation of RT-LOTOS or Java code from this diagram,
+ * and at last to allow the analysis of formal validation traces
+ * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP
+ * from INRIA Rhone-Alpes.
+ * 
+ * This software is governed by the CeCILL  license under French law and
+ * abiding by the rules of distribution of free software.  You can  use,
+ * modify and/ or redistribute the software under the terms of the CeCILL
+ * license as circulated by CEA, CNRS and INRIA at the following URL
+ * "http://www.cecill.info".
+ * 
+ * As a counterpart to the access to the source code and  rights to copy,
+ * modify and redistribute granted by the license, users are provided only
+ * with a limited warranty  and the software's author,  the holder of the
+ * economic rights,  and the successive licensors  have only  limited
+ * liability.
+ * 
+ * In this respect, the user's attention is drawn to the risks associated
+ * with loading,  using,  modifying and/or developing or reproducing the
+ * software by the user in light of its specific status of free software,
+ * that may mean  that it is complicated to manipulate,  and  that  also
+ * therefore means  that it is reserved for developers  and  experienced
+ * professionals having in-depth computer knowledge. Users are therefore
+ * encouraged to load and test the software's suitability as regards their
+ * requirements in conditions enabling the security of their systems and/or
+ * data to be ensured and,  more generally, to use and operate it in the
+ * same conditions as regards security.
+ * 
+ * The fact that you are presently reading this means that you have had
+ * knowledge of the CeCILL license and that you accept its terms.
+ */
+
+package avatartranslator.mutation;
+
+import avatartranslator.*;
+
+//import myutil.TraceManager;
+
+/**
+ * Class NoneRandomMutation
+ * Creation: 30/06/2022
+ *
+ * @author Léon FRENOT
+ * @version 1.0 30/06/2022
+ */
+
+public class NoneRandomMutation extends RandomMutation {
+
+    protected NoneRandomMutation(String _blockName, String _attributeName) {
+        super(_blockName, _attributeName);
+    }
+
+    protected NoneRandomMutation(String _blockName, String _name, int _nameType) {
+        super(_blockName, _name, _nameType);
+    }
+
+    protected NoneRandomMutation(String _blockName, String _name, int _nameType, String _attributeName) {
+        super(_blockName, _name, _nameType, _attributeName);
+    }
+
+    public void apply(AvatarSpecification _avspec) {
+        return;
+    }
+
+    
+}
\ No newline at end of file
diff --git a/src/main/java/avatartranslator/mutation/NoneRelationMutation.java b/src/main/java/avatartranslator/mutation/NoneRelationMutation.java
new file mode 100644
index 0000000000..364ab1f039
--- /dev/null
+++ b/src/main/java/avatartranslator/mutation/NoneRelationMutation.java
@@ -0,0 +1,64 @@
+/* Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Ludovic Apvrille
+ * 
+ * ludovic.apvrille AT enst.fr
+ * 
+ * This software is a computer program whose purpose is to allow the
+ * edition of TURTLE analysis, design and deployment diagrams, to
+ * allow the generation of RT-LOTOS or Java code from this diagram,
+ * and at last to allow the analysis of formal validation traces
+ * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP
+ * from INRIA Rhone-Alpes.
+ * 
+ * This software is governed by the CeCILL  license under French law and
+ * abiding by the rules of distribution of free software.  You can  use,
+ * modify and/ or redistribute the software under the terms of the CeCILL
+ * license as circulated by CEA, CNRS and INRIA at the following URL
+ * "http://www.cecill.info".
+ * 
+ * As a counterpart to the access to the source code and  rights to copy,
+ * modify and redistribute granted by the license, users are provided only
+ * with a limited warranty  and the software's author,  the holder of the
+ * economic rights,  and the successive licensors  have only  limited
+ * liability.
+ * 
+ * In this respect, the user's attention is drawn to the risks associated
+ * with loading,  using,  modifying and/or developing or reproducing the
+ * software by the user in light of its specific status of free software,
+ * that may mean  that it is complicated to manipulate,  and  that  also
+ * therefore means  that it is reserved for developers  and  experienced
+ * professionals having in-depth computer knowledge. Users are therefore
+ * encouraged to load and test the software's suitability as regards their
+ * requirements in conditions enabling the security of their systems and/or
+ * data to be ensured and,  more generally, to use and operate it in the
+ * same conditions as regards security.
+ * 
+ * The fact that you are presently reading this means that you have had
+ * knowledge of the CeCILL license and that you accept its terms.
+ */
+
+package avatartranslator.mutation;
+
+import avatartranslator.*;
+
+/**
+ * Class NoneRelationMutation
+ * Creation: 29/06/2022
+ *
+ * @author Léon FRENOT
+ * @version 1.0 29/06/2022
+ */
+public class NoneRelationMutation extends RelationMutation {
+
+    public NoneRelationMutation(String _block1, String _block2) {
+        super(_block1, _block2);
+    }
+
+    public NoneRelationMutation(String _relationString, int _relationType) {
+        super(_relationString, _relationType);
+    }
+
+    public void apply(AvatarSpecification _avspec) {
+        return;
+    }
+    
+}
\ No newline at end of file
diff --git a/src/main/java/avatartranslator/mutation/NoneTransitionMutation.java b/src/main/java/avatartranslator/mutation/NoneTransitionMutation.java
new file mode 100644
index 0000000000..4761734798
--- /dev/null
+++ b/src/main/java/avatartranslator/mutation/NoneTransitionMutation.java
@@ -0,0 +1,65 @@
+/* Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Ludovic Apvrille
+ * 
+ * ludovic.apvrille AT enst.fr
+ * 
+ * This software is a computer program whose purpose is to allow the
+ * edition of TURTLE analysis, design and deployment diagrams, to
+ * allow the generation of RT-LOTOS or Java code from this diagram,
+ * and at last to allow the analysis of formal validation traces
+ * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP
+ * from INRIA Rhone-Alpes.
+ * 
+ * This software is governed by the CeCILL  license under French law and
+ * abiding by the rules of distribution of free software.  You can  use,
+ * modify and/ or redistribute the software under the terms of the CeCILL
+ * license as circulated by CEA, CNRS and INRIA at the following URL
+ * "http://www.cecill.info".
+ * 
+ * As a counterpart to the access to the source code and  rights to copy,
+ * modify and redistribute granted by the license, users are provided only
+ * with a limited warranty  and the software's author,  the holder of the
+ * economic rights,  and the successive licensors  have only  limited
+ * liability.
+ * 
+ * In this respect, the user's attention is drawn to the risks associated
+ * with loading,  using,  modifying and/or developing or reproducing the
+ * software by the user in light of its specific status of free software,
+ * that may mean  that it is complicated to manipulate,  and  that  also
+ * therefore means  that it is reserved for developers  and  experienced
+ * professionals having in-depth computer knowledge. Users are therefore
+ * encouraged to load and test the software's suitability as regards their
+ * requirements in conditions enabling the security of their systems and/or
+ * data to be ensured and,  more generally, to use and operate it in the
+ * same conditions as regards security.
+ * 
+ * The fact that you are presently reading this means that you have had
+ * knowledge of the CeCILL license and that you accept its terms.
+ */
+
+package avatartranslator.mutation;
+
+import avatartranslator.*;
+//import myutil.TraceManager;
+
+/**
+ * Class NoneTransitionMutation
+ * Creation: 30/06/2022
+ *
+ * @author Léon FRENOT
+ * @version 1.0 30/06/2022
+ */
+public class NoneTransitionMutation extends TransitionMutation {
+    
+    public NoneTransitionMutation(String _blockName, String _fromString, int _fromType, String _toString, int _toType) {
+        super(_blockName, _fromString, _fromType, _toString, _toType);
+    }
+
+    public NoneTransitionMutation(String _blockName, String _transitionString, int _transitionType) {
+        super(_blockName, _transitionString, _transitionType);
+    }
+
+    public void apply(AvatarSpecification _avspec) {
+        return;
+    }
+
+}
\ No newline at end of file
diff --git a/src/main/java/avatartranslator/mutation/RandomMutation.java b/src/main/java/avatartranslator/mutation/RandomMutation.java
index 53522801f5..8a7b90dcaa 100644
--- a/src/main/java/avatartranslator/mutation/RandomMutation.java
+++ b/src/main/java/avatartranslator/mutation/RandomMutation.java
@@ -51,12 +51,23 @@ import myutil.TraceManager;
  * @version 1.0 27/06/2022
  */
 
-public abstract class RandomMutation extends StateMachineElementMutation {
-    
-    private String name = "";
-    private int nameType = UNDEFINED_TYPE;
+public abstract class RandomMutation extends UnnamedStateMachineElementMutation {
 
-    private String variable;
+    protected RandomMutation(String _blockName, String _attributeName) {
+        super(_blockName);
+        setAttributeName(_attributeName);
+    }
+
+    protected RandomMutation(String _blockName, String _name, int _nameType) {
+        super(_blockName, _name, _nameType);
+    }
+
+    protected RandomMutation(String _blockName, String _name, int _nameType, String _attributeName) {
+        super(_blockName, _name, _nameType);
+        setAttributeName(_attributeName);
+    }
+
+    private String attributeName;
 
     private String minValue;
     private String maxValue;
@@ -69,45 +80,23 @@ public abstract class RandomMutation extends StateMachineElementMutation {
 
     private boolean functionSet = false;
 
-    public String getName() {
-        return name;
-    }
-
-    public boolean isNameSet() {
-        return nameType != UNDEFINED_TYPE;
-    }
-
-    public int getNameType() {
-        return nameType;
-    }
-
-    public void setName(String _name) {
-        name = _name;
-        nameType = NAME_TYPE;
-    }
-
-    public void setUUID(String _uuid) {
-        name = _uuid;
-        nameType = UUID_TYPE;
-    }
-
-    public String getVariable() {
-        return variable;
+    protected String getAttributeName() {
+        return attributeName;
     }
 
-    public void setVariable(String _variable) {
-        variable = _variable;
+    private void setAttributeName(String _variable) {
+        attributeName = _variable;
     }
 
-    public String getMinValue() {
+    protected String getMinValue() {
         return minValue;
     }
 
-    public String getMaxValue() {
+    protected String getMaxValue() {
         return maxValue;
     }
 
-    public boolean areValuesSet() {
+    protected boolean areValuesSet() {
         return valuesSet;
     }
 
@@ -117,19 +106,19 @@ public abstract class RandomMutation extends StateMachineElementMutation {
         valuesSet = true;
     }
 
-    public int getFunctionId() {
+    protected int getFunctionId() {
         return functionId;
     }
 
-    public String getExtraAttribute1() {
+    protected String getExtraAttribute1() {
         return extraAttribute1;
     }
 
-    public String getExtraAttribute2() {
+    protected String getExtraAttribute2() {
         return extraAttribute2;
     }
 
-    public boolean isFunctionSet() {
+    protected boolean isFunctionSet() {
         return functionSet;
     }
 
@@ -148,6 +137,7 @@ public abstract class RandomMutation extends StateMachineElementMutation {
         extraAttribute2 = _extraAttribute2;
     }
 
+    @Override
     public AvatarRandom getElement(AvatarSpecification _avspec) {
         if (!isNameSet()) {
             //TraceManager.addDev("name not set");
@@ -157,7 +147,7 @@ public abstract class RandomMutation extends StateMachineElementMutation {
                 if (elt instanceof AvatarRandom) {
                     AvatarRandom rnd = (AvatarRandom)elt;
                     //TraceManager.addDev(rnd.getNiceName());
-                    boolean flag = rnd.getVariable().equals(this.getVariable());
+                    boolean flag = rnd.getVariable().equals(this.getAttributeName());
                     if (this.areValuesSet()) {
                         if (this.getMinValue().equals(rnd.getMinValue())) {
                             flag = this.getMaxValue().equals(rnd.getMaxValue());
@@ -175,7 +165,7 @@ public abstract class RandomMutation extends StateMachineElementMutation {
             }
             return null;
         }
-        AvatarStateMachineElement element = getElement(_avspec, nameType, name);
+        AvatarStateMachineElement element = super.getElement(_avspec);
         if (element != null && element instanceof AvatarRandom) return (AvatarRandom)element;
         return null;
     }
diff --git a/src/main/java/avatartranslator/mutation/RelationMutation.java b/src/main/java/avatartranslator/mutation/RelationMutation.java
index a9a1ccbd6e..6878c039ff 100644
--- a/src/main/java/avatartranslator/mutation/RelationMutation.java
+++ b/src/main/java/avatartranslator/mutation/RelationMutation.java
@@ -53,8 +53,18 @@ import avatartranslator.*;
  */
 public abstract class RelationMutation extends AvatarMutation implements UnnamedElementMutation {
 
-    private String name = "";
-    private int nameType = UNDEFINED_TYPE;
+    protected RelationMutation(String _block1, String _block2) {
+        super();
+        setBlocks(_block1, _block2);
+    }
+
+    protected RelationMutation(String _relationString, int _relationType) {
+        super();
+        setName(_relationString, _relationType);
+    }
+
+    private String relationString = "";
+    private int relationStringType = UNDEFINED_TYPE;
     
     private String block1, block2;
 
@@ -67,54 +77,49 @@ public abstract class RelationMutation extends AvatarMutation implements Unnamed
     private int id = 0;//DG
     private boolean idSet = false;
 
-    public String getName() {
-        return name;
-    }
-
-    public boolean isNameSet() {
-        return nameType != UNDEFINED_TYPE;
+    protected String getName() {
+        return relationString;
     }
 
-    public int getNameType() {
-        return nameType;
+    protected boolean isNameSet() {
+        return relationStringType != UNDEFINED_TYPE;
     }
 
-    public void setName(String _name) {
-        name = _name;
-        nameType = NAME_TYPE;
+    protected int getRelationStringType() {
+        return relationStringType;
     }
 
-    public void setUUID(String _uuid) {
-        name = _uuid;
-        nameType = UUID_TYPE;
+    private void setName(String _relationString, int _relationType) {
+        relationString = _relationString;
+        relationStringType = _relationType;
     }
 
-    public String getBlock1() {
+    protected String getBlock1() {
         return block1;
     }
 
-    public AvatarBlock getBlock1(AvatarSpecification _avspec) {
+    protected AvatarBlock getBlock1(AvatarSpecification _avspec) {
         return getBlock(_avspec, getBlock1());
     }
 
-    public String getBlock2() {
+    protected String getBlock2() {
         return block2;
     }
 
-    public AvatarBlock getBlock2(AvatarSpecification _avspec) {
+    protected AvatarBlock getBlock2(AvatarSpecification _avspec) {
         return getBlock(_avspec, getBlock2());
     }
 
-    public void setBlocks(String _block1, String _block2) {
+    private void setBlocks(String _block1, String _block2) {
         block1 = _block1;
         block2 = _block2;
     }
 
-    public boolean isBlocking() {
+    protected boolean isBlocking() {
         return blocking;
     }
 
-    public boolean blockingSet() {
+    protected boolean blockingSet() {
         return blockingSet;
     }
 
@@ -123,11 +128,11 @@ public abstract class RelationMutation extends AvatarMutation implements Unnamed
         blockingSet = true;
     }
 
-    public boolean isAsynchronous() {
+    protected boolean isAsynchronous() {
         return asynchronous;
     }
 
-    public boolean asynchronousSet() {
+    protected boolean asynchronousSet() {
         return asynchronousSet;
     }
 
@@ -136,11 +141,11 @@ public abstract class RelationMutation extends AvatarMutation implements Unnamed
         asynchronousSet = true;
     }
 
-    public boolean isAMS() {
+    protected boolean isAMS() {
         return ams;
     }
 
-    public boolean AMSSet() {
+    protected boolean AMSSet() {
         return amsSet;
     }
 
@@ -149,11 +154,11 @@ public abstract class RelationMutation extends AvatarMutation implements Unnamed
         amsSet = true;
     }
 
-    public boolean isPrivate() {
+    protected boolean isPrivate() {
         return isPrivate;
     }
 
-    public boolean privateSet() {
+    protected boolean privateSet() {
         return isPrivateSet;
     }
 
@@ -162,11 +167,11 @@ public abstract class RelationMutation extends AvatarMutation implements Unnamed
         isPrivateSet = true;
     }
 
-    public boolean isBroadcast() {
+    protected boolean isBroadcast() {
         return isBroadcast;
     }
 
-    public boolean broadcastSet() {
+    protected boolean broadcastSet() {
         return isBroadcastSet;
     }
 
@@ -175,11 +180,11 @@ public abstract class RelationMutation extends AvatarMutation implements Unnamed
         isBroadcastSet = true;
     }
 
-    public boolean isLossy() {
+    protected boolean isLossy() {
         return isLossy;
     }
 
-    public boolean lossySet() {
+    protected boolean lossySet() {
         return isLossySet;
     }
 
@@ -188,11 +193,11 @@ public abstract class RelationMutation extends AvatarMutation implements Unnamed
         isLossySet = true;
     }
 
-    public int getSizeOfFIFO() {
+    protected int getSizeOfFIFO() {
         return sizeOfFIFO;
     }
 
-    public boolean sizeOfFIFOSet() {
+    protected boolean sizeOfFIFOSet() {
         return sizeOfFIFOSet;
     }
 
@@ -201,11 +206,11 @@ public abstract class RelationMutation extends AvatarMutation implements Unnamed
         sizeOfFIFOSet = true;
     }
 
-    public int getId() {
+    protected int getId() {
         return id;
     }
 
-    public boolean idSet() {
+    protected boolean idSet() {
         return idSet;
     }
 
@@ -214,7 +219,7 @@ public abstract class RelationMutation extends AvatarMutation implements Unnamed
         idSet = true;
     }
 
-    public AvatarRelation getElementFromName(AvatarSpecification _avspec, String _name) {
+    private AvatarRelation getElementFromName(AvatarSpecification _avspec, String _name) {
         List<AvatarRelation> relations = _avspec.getRelations();
         for (AvatarRelation rel : relations) {
             if (rel.getName().equals(_name)) return rel;
@@ -222,7 +227,7 @@ public abstract class RelationMutation extends AvatarMutation implements Unnamed
         return null;
     }
 
-    public AvatarRelation getElementFromUUID(AvatarSpecification _avspec, String _uuid) {
+    private AvatarRelation getElementFromUUID(AvatarSpecification _avspec, String _uuid) {
         List<AvatarRelation> relations = _avspec.getRelations();
         for (AvatarRelation rel : relations) {
             UUID relUUID = rel.getUUID();
@@ -268,6 +273,6 @@ public abstract class RelationMutation extends AvatarMutation implements Unnamed
             }
             return null;
         }
-        return getElement(_avspec, getNameType(), getName());
+        return getElement(_avspec, getRelationStringType(), getName());
     }
 }
\ No newline at end of file
diff --git a/src/main/java/avatartranslator/mutation/ResetTimerMutation.java b/src/main/java/avatartranslator/mutation/ResetTimerMutation.java
index d64c58069c..9f2b41b236 100644
--- a/src/main/java/avatartranslator/mutation/ResetTimerMutation.java
+++ b/src/main/java/avatartranslator/mutation/ResetTimerMutation.java
@@ -51,6 +51,18 @@ import java.util.List;
  */
 public abstract class ResetTimerMutation extends TimerOperatorMutation {
 
+    protected ResetTimerMutation(String _blockName, String _timerName) {
+        super(_blockName, _timerName);
+    }
+
+    protected ResetTimerMutation(String _blockName, String _name, int _nameType) {
+        super(_blockName, _name, _nameType);
+    }
+
+    protected ResetTimerMutation(String _blockName, String _name, int _nameType, String _timerName) {
+        super(_blockName, _name, _nameType, _timerName);
+    }
+
     @Override
     public AvatarResetTimer getElement(AvatarSpecification _avspec) {
         if (isNameSet())
diff --git a/src/main/java/avatartranslator/mutation/RmActionMutation.java b/src/main/java/avatartranslator/mutation/RmActionMutation.java
index a59194f38f..81388cd835 100644
--- a/src/main/java/avatartranslator/mutation/RmActionMutation.java
+++ b/src/main/java/avatartranslator/mutation/RmActionMutation.java
@@ -52,17 +52,21 @@ import avatartranslator.*;
  */
 
 public class RmActionMutation extends ActionMutation implements RmMutation {
-    
-    public RmActionMutation(String _blockName, String _actionString) {
-        setBlockName(_blockName);
-        setActionString(_actionString);
-        initActions();
+
+    public RmActionMutation(String _blockName, String _fromString, int _fromType, String _toString, int _toType, String _actionString) {
+        super(_blockName, _fromString, _fromType, _toString, _toType, _actionString);
+    }
+
+    public RmActionMutation(String _blockName, String _fromString, int _fromType, String _toString, int _toType, int _index) {
+        super(_blockName, _fromString, _fromType, _toString, _toType, _index);
+    }
+
+    public RmActionMutation(String _blockName, String _transitionString, int _transitionType, String _actionString) {
+        super(_blockName, _transitionString, _transitionType, _actionString);
     }
 
-    public RmActionMutation(String _blockName, int _index) {
-        setBlockName(_blockName);
-        setIndex(_index);
-        initActions();
+    public RmActionMutation(String _blockName, String _transitionString, int _transitionType, int _index) {
+        super(_blockName, _transitionString, _transitionType, _index);
     }
 
     public void apply(AvatarSpecification _avspec) {
diff --git a/src/main/java/avatartranslator/mutation/RmActionOnSignalMutation.java b/src/main/java/avatartranslator/mutation/RmActionOnSignalMutation.java
index cf298ec04a..aac744a4bb 100644
--- a/src/main/java/avatartranslator/mutation/RmActionOnSignalMutation.java
+++ b/src/main/java/avatartranslator/mutation/RmActionOnSignalMutation.java
@@ -52,17 +52,23 @@ import myutil.TraceManager;
 
 public class RmActionOnSignalMutation extends ActionOnSignalMutation implements RmMutation {
 
-    public RmActionOnSignalMutation(String _signalName, String _block) {
-        setSignalName(_signalName);
-        setBlockName(_block);
-        initValues();
+    public RmActionOnSignalMutation(String _blockName, String _signalName) {
+        super(_blockName, _signalName);
     }
 
+    public RmActionOnSignalMutation(String _blockName, String _name, int _nameType) {
+        super(_blockName, _name, _nameType);
+    }
+
+    @Override
     public void apply(AvatarSpecification _avspec) {
         AvatarStateMachine asm = getAvatarStateMachine(_avspec);
         AvatarActionOnSignal aaos = getElement(_avspec);
-        TraceManager.addDev(aaos.toString());
+        if (aaos == null) {
+            TraceManager.addDev("unknown ActionOnSignal");
+            return;
+        }
         asm.removeElement(aaos);
     }
-    
+
 }
diff --git a/src/main/java/avatartranslator/mutation/RmAssociationMutation.java b/src/main/java/avatartranslator/mutation/RmAssociationMutation.java
index 78fa553cb3..78933363e8 100644
--- a/src/main/java/avatartranslator/mutation/RmAssociationMutation.java
+++ b/src/main/java/avatartranslator/mutation/RmAssociationMutation.java
@@ -50,8 +50,11 @@ import avatartranslator.*;
 public class RmAssociationMutation extends AssociationMutation implements RmMutation {
 
     public RmAssociationMutation(String _block1, String _block2, String _signal1, String _signal2) {
-        setBlocks(_block1, _block2);
-        setSignals(_signal1, _signal2);
+        super(_block1, _block2, _signal1, _signal2);
+    }
+
+    public RmAssociationMutation(String _relationString, int _relationType, String _signal1, String _signal2) {
+        super(_relationString, _relationType, _signal1, _signal2);
     }
 
     public void apply(AvatarSpecification _avspec) {
diff --git a/src/main/java/avatartranslator/mutation/RmAttributeMutation.java b/src/main/java/avatartranslator/mutation/RmAttributeMutation.java
index b315c68073..e5d17df51d 100644
--- a/src/main/java/avatartranslator/mutation/RmAttributeMutation.java
+++ b/src/main/java/avatartranslator/mutation/RmAttributeMutation.java
@@ -52,9 +52,8 @@ import myutil.TraceManager;
  */
 public class RmAttributeMutation extends AttributeMutation implements RmMutation {
 
-    public RmAttributeMutation(String _name, String _blockName) {
-        setName(_name);
-        setBlockName(_blockName);
+    public RmAttributeMutation(String _blockName, String _attributeName) {
+        super(_blockName, _attributeName);
     }
 
     public void apply(AvatarSpecification _avspec) {
@@ -65,6 +64,6 @@ public class RmAttributeMutation extends AttributeMutation implements RmMutation
             TraceManager.addDev("Unknown Attribute");
             return;
         }
-        attr.remove(aa);
+        if (!attr.remove(aa)) TraceManager.addDev("Attribute is from a super-bloc");
     }
 }
\ No newline at end of file
diff --git a/src/main/java/avatartranslator/mutation/RmBlockMutation.java b/src/main/java/avatartranslator/mutation/RmBlockMutation.java
index 8d59519f4c..50405bffc2 100644
--- a/src/main/java/avatartranslator/mutation/RmBlockMutation.java
+++ b/src/main/java/avatartranslator/mutation/RmBlockMutation.java
@@ -41,6 +41,8 @@ package avatartranslator.mutation;
 import java.util.List;
 
 import avatartranslator.*;
+import myutil.TraceManager;
+
 /**
  * Class RmBlockMutation
  * Creation: 29/06/2022
@@ -48,11 +50,10 @@ import avatartranslator.*;
  * @author Léon FRENOT
  * @version 1.0 29/06/2022
  */
-
-public class RmBlockMutation extends BlockStructMutation implements RmMutation {
+public class RmBlockMutation extends BlockElementMutation implements RmMutation {
     
     public RmBlockMutation(String _blockName) {
-        setBlockName(_blockName);
+        super(_blockName);
     }
 
     public AvatarBlock getElement(AvatarSpecification _avspec) {
@@ -62,6 +63,6 @@ public class RmBlockMutation extends BlockStructMutation implements RmMutation {
     public void apply(AvatarSpecification _avspec) {
         AvatarBlock block = getElement(_avspec);
         List<AvatarBlock> blocks = _avspec.getListOfBlocks();
-        blocks.remove(block);
+        if(!blocks.remove(block)) TraceManager.addDev("unknown block");
     }
 }
diff --git a/src/main/java/avatartranslator/mutation/RmExpireTimerMutation.java b/src/main/java/avatartranslator/mutation/RmExpireTimerMutation.java
index c9cf79d7ec..65d484c370 100644
--- a/src/main/java/avatartranslator/mutation/RmExpireTimerMutation.java
+++ b/src/main/java/avatartranslator/mutation/RmExpireTimerMutation.java
@@ -49,9 +49,12 @@ import avatartranslator.*;
  */
 public class RmExpireTimerMutation extends ExpireTimerMutation implements RmMutation {
 
-    public RmExpireTimerMutation(String _timerName, String _block) {
-        setTimerName(_timerName);
-        setBlockName(_block);
+    public RmExpireTimerMutation(String _blockName, String _timerName) {
+        super(_blockName, _timerName);
+    }
+
+    public RmExpireTimerMutation(String _blockName, String _name, int _nameType, String _timerName) {
+        super(_blockName, _name, _nameType, _timerName);
     }
 
     public void apply(AvatarSpecification _avspec) {
diff --git a/src/main/java/avatartranslator/mutation/RmMethodMutation.java b/src/main/java/avatartranslator/mutation/RmMethodMutation.java
index 8bdf564e54..b66343b1a1 100644
--- a/src/main/java/avatartranslator/mutation/RmMethodMutation.java
+++ b/src/main/java/avatartranslator/mutation/RmMethodMutation.java
@@ -52,10 +52,8 @@ import myutil.TraceManager;
  */
 public class RmMethodMutation extends MethodMutation implements RmMutation {
 
-    public RmMethodMutation(String _name, String _blockName) {
-        setName(_name);
-        setBlockName(_blockName);
-        initParameters();
+    public RmMethodMutation(String _blockName, String _methodName) {
+        super(_blockName, _methodName);
     }
 
     public void apply(AvatarSpecification _avspec) {
diff --git a/src/main/java/avatartranslator/mutation/RmRandomMutation.java b/src/main/java/avatartranslator/mutation/RmRandomMutation.java
index 063d8c9c6b..f1dc8f5550 100644
--- a/src/main/java/avatartranslator/mutation/RmRandomMutation.java
+++ b/src/main/java/avatartranslator/mutation/RmRandomMutation.java
@@ -39,6 +39,7 @@
 package avatartranslator.mutation;
 
 import avatartranslator.*;
+import myutil.TraceManager;
 
 /**
  * Class RmRandomMutation
@@ -50,14 +51,23 @@ import avatartranslator.*;
 
 public class RmRandomMutation extends RandomMutation implements RmMutation {
 
-    public RmRandomMutation(String _variable, String _blockName) {
-        setBlockName(_blockName);
-        setVariable(_variable);
+    public RmRandomMutation(String _blockName, String _attributeName) {
+        super(_blockName, _attributeName);
+    }
+
+    public RmRandomMutation(String _blockName, String _name, int _nameType) {
+        super(_blockName, _name, _nameType);
     }
 
     public void apply(AvatarSpecification _avspec) {
         AvatarStateMachine asm = getAvatarStateMachine(_avspec);
         AvatarRandom rand = getElement(_avspec);
+
+        if(rand == null) {
+            TraceManager.addDev("unknown random operator");
+            return;
+        }
+
         asm.removeElement(rand);
     }
 
diff --git a/src/main/java/avatartranslator/mutation/RmRelationMutation.java b/src/main/java/avatartranslator/mutation/RmRelationMutation.java
index 32c14cb56b..4feff85d07 100644
--- a/src/main/java/avatartranslator/mutation/RmRelationMutation.java
+++ b/src/main/java/avatartranslator/mutation/RmRelationMutation.java
@@ -52,7 +52,11 @@ import avatartranslator.*;
 public class RmRelationMutation extends RelationMutation implements RmMutation {
 
     public RmRelationMutation(String _block1, String _block2) {
-        setBlocks(_block1, _block2);
+        super(_block1, _block2);
+    }
+
+    public RmRelationMutation(String _relationString, int _relationType) {
+        super(_relationString, _relationType);
     }
 
     public void apply(AvatarSpecification _avspec) {
diff --git a/src/main/java/avatartranslator/mutation/RmResetTimerMutation.java b/src/main/java/avatartranslator/mutation/RmResetTimerMutation.java
index 01de78044e..7dc7f4ee50 100644
--- a/src/main/java/avatartranslator/mutation/RmResetTimerMutation.java
+++ b/src/main/java/avatartranslator/mutation/RmResetTimerMutation.java
@@ -49,9 +49,12 @@ import avatartranslator.*;
  */
 public class RmResetTimerMutation extends ResetTimerMutation implements RmMutation {
 
-    public RmResetTimerMutation(String _timerName, String _block) {
-        setTimerName(_timerName);
-        setBlockName(_block);
+    public RmResetTimerMutation(String _blockName, String _timerName) {
+        super(_blockName, _timerName);
+    }
+
+    public RmResetTimerMutation(String _blockName, String _name, int _nameType, String _timerName) {
+        super(_blockName, _name, _nameType, _timerName);
     }
 
     public void apply(AvatarSpecification _avspec) {
diff --git a/src/main/java/avatartranslator/mutation/RmSetTimerMutation.java b/src/main/java/avatartranslator/mutation/RmSetTimerMutation.java
index eaad12c0db..2e048d6ddc 100644
--- a/src/main/java/avatartranslator/mutation/RmSetTimerMutation.java
+++ b/src/main/java/avatartranslator/mutation/RmSetTimerMutation.java
@@ -49,9 +49,12 @@ import avatartranslator.*;
  */
 public class RmSetTimerMutation extends SetTimerMutation implements RmMutation {
 
-    public RmSetTimerMutation(String _timerName, String _block) {
-        setTimerName(_timerName);
-        setBlockName(_block);
+    public RmSetTimerMutation(String _blockName, String _timerName, String _timerValue) {
+        super(_blockName, _timerName, _timerValue);
+    }
+
+    public RmSetTimerMutation(String _blockName, String _name, int _nameType) {
+        super(_blockName, _name, _nameType);
     }
 
     public void apply(AvatarSpecification _avspec) {
diff --git a/src/main/java/avatartranslator/mutation/RmSignalMutation.java b/src/main/java/avatartranslator/mutation/RmSignalMutation.java
index 78a0d2e19a..9873442981 100644
--- a/src/main/java/avatartranslator/mutation/RmSignalMutation.java
+++ b/src/main/java/avatartranslator/mutation/RmSignalMutation.java
@@ -52,10 +52,8 @@ import myutil.TraceManager;
  */
 public class RmSignalMutation extends SignalMutation implements RmMutation {
     
-    public RmSignalMutation(String _name, String _blockName) {
-        setName(_name);
-        setBlockName(_blockName);
-        initParameters();
+    public RmSignalMutation(String _blockName, String _signalName) {
+        super(_blockName, _signalName);
     }
 
     public void apply(AvatarSpecification _avspec) {
diff --git a/src/main/java/avatartranslator/mutation/RmStateMutation.java b/src/main/java/avatartranslator/mutation/RmStateMutation.java
index 925dbeff95..3390f9d6ef 100644
--- a/src/main/java/avatartranslator/mutation/RmStateMutation.java
+++ b/src/main/java/avatartranslator/mutation/RmStateMutation.java
@@ -39,6 +39,7 @@
 package avatartranslator.mutation;
 
 import avatartranslator.*;
+import myutil.TraceManager;
 
 /**
  * Class RmStateMutation
@@ -50,14 +51,14 @@ import avatartranslator.*;
 
 public class RmStateMutation extends StateMutation implements RmMutation {
     
-    public RmStateMutation(String _name, String _blockName) {
-        setName(_name);
-        setBlockName(_blockName);
+    public RmStateMutation(String _blockName, String _stateName) {
+        super(_blockName, _stateName);
     }
 
     public void apply(AvatarSpecification _avspec) {
         AvatarState state = getElement(_avspec);
         AvatarStateMachine asm = getAvatarStateMachine(_avspec);
+        if (state == null) TraceManager.addDev("unknown state");
         asm.removeElement(state);
     }
 }
diff --git a/src/main/java/avatartranslator/mutation/RmTransitionMutation.java b/src/main/java/avatartranslator/mutation/RmTransitionMutation.java
index b566f6c1fb..7818c691f5 100644
--- a/src/main/java/avatartranslator/mutation/RmTransitionMutation.java
+++ b/src/main/java/avatartranslator/mutation/RmTransitionMutation.java
@@ -50,9 +50,12 @@ import avatartranslator.*;
  */
 public class RmTransitionMutation extends TransitionMutation implements RmMutation {
     
-    public RmTransitionMutation(String _blockName) {
-        setBlockName(_blockName);
-        initActions();
+    public RmTransitionMutation(String _blockName, String _fromString, int _fromType, String _toString, int _toType) {
+        super(_blockName, _fromString, _fromType, _toString, _toType);
+    }
+
+    public RmTransitionMutation(String _blockName, String _transitionString, int _transitionType) {
+        super(_blockName, _transitionString, _transitionType);
     }
 
     public void apply(AvatarSpecification _avspec) {
diff --git a/src/main/java/avatartranslator/mutation/SetTimerMutation.java b/src/main/java/avatartranslator/mutation/SetTimerMutation.java
index 8964119aae..478d154e7a 100644
--- a/src/main/java/avatartranslator/mutation/SetTimerMutation.java
+++ b/src/main/java/avatartranslator/mutation/SetTimerMutation.java
@@ -53,14 +53,29 @@ public abstract class SetTimerMutation extends TimerOperatorMutation {
 
     private String timerValue;
 
-    public String getTimerValue() {
-        return timerValue;
+    protected SetTimerMutation(String _blockName, String _timerName, String _timerValue) {
+        super(_blockName, _timerName);
+        timerValue = _timerValue;
+    }
+
+    protected SetTimerMutation(String _blockName, String _name, int _nameType) {
+        super(_blockName, _name, _nameType);
+    }
+
+    protected SetTimerMutation(String _blockName, String _name, int _nameType, String _timerValue) {
+        super(_blockName, _name, _nameType);
+        timerValue = _timerValue;
     }
 
-    public void setTimerValue(String _timerValue) {
+    protected SetTimerMutation(String _blockName, String _name, int _nameType, String _timerName, String _timerValue) {
+        super(_blockName, _name, _nameType, _timerName);
         timerValue = _timerValue;
     }
 
+    protected String getTimerValue() {
+        return timerValue;
+    }
+
     @Override
     public AvatarSetTimer getElement(AvatarSpecification _avspec) {
         if (isNameSet())
@@ -70,7 +85,7 @@ public abstract class SetTimerMutation extends TimerOperatorMutation {
         for (AvatarStateMachineElement elm : elms) {
             if (elm instanceof AvatarSetTimer) {
                 AvatarSetTimer tmp = (AvatarSetTimer)elm;
-                if (tmp.getTimer().getName().equals(this.getTimerName())) {
+                if (tmp.getTimer().getName().equals(this.getTimerName()) && tmp.getTimerValue().equals(this.getTimerValue())) {
                     return tmp;
                 }
             }
diff --git a/src/main/java/avatartranslator/mutation/SignalMutation.java b/src/main/java/avatartranslator/mutation/SignalMutation.java
index 2050ed17ed..c72fb04557 100644
--- a/src/main/java/avatartranslator/mutation/SignalMutation.java
+++ b/src/main/java/avatartranslator/mutation/SignalMutation.java
@@ -49,22 +49,35 @@ import avatartranslator.*;
  */
 
 public abstract class SignalMutation extends MethodMutation {
+
+    protected SignalMutation(String _blockName, String _signalName) {
+        super(_blockName, _signalName);
+    }
+
+    protected SignalMutation(String _blockName, String _signalName, int _inout) {
+        super(_blockName, _signalName);
+        setInOut(_inout);
+    }
     
     private int inout;
     
     public final static int IN = AvatarSignal.IN;
     public final static int OUT = AvatarSignal.OUT;
 
-    public void setInOut(int _inout) {
+    protected String getSignalName() {
+        return getMethodName();
+    }
+
+    protected void setInOut(int _inout) {
         inout = _inout;
     }
 
-    public int getInOut() {
+    protected int getInOut() {
         return inout;
     }
 
     @Override
     public AvatarSignal getElement(AvatarSpecification _avspec) {
-        return getSignal(_avspec, getName());
+        return getSignal(_avspec, getMethodName());
     }
 }
diff --git a/src/main/java/avatartranslator/mutation/StateMachineElementMutation.java b/src/main/java/avatartranslator/mutation/StateMachineElementMutation.java
index d7fb256130..ea841af7d1 100644
--- a/src/main/java/avatartranslator/mutation/StateMachineElementMutation.java
+++ b/src/main/java/avatartranslator/mutation/StateMachineElementMutation.java
@@ -40,9 +40,6 @@ package avatartranslator.mutation;
 
 import avatartranslator.*;
 
-import java.util.List;
-import java.util.UUID;
-
 /**
  * Class AvatarStateMachineElementMutation
  * Creation: 27/06/2022
@@ -51,39 +48,14 @@ import java.util.UUID;
  * @version 1.0 27/06/2022
  */
 
-public abstract class StateMachineElementMutation extends BlockStructMutation implements UnnamedElementMutation {
-
-    public AvatarStateMachine getAvatarStateMachine(AvatarSpecification _avspec) {
-        AvatarBlock block = getBlock(_avspec);
-        return block.getStateMachine();
-    }
-
-    public AvatarStateMachineElement getElementFromName(AvatarSpecification _avspec, String _name) {
-        AvatarStateMachine asm = getAvatarStateMachine(_avspec);
-        List<AvatarStateMachineElement> elts = asm.getListOfElements();
-        for (AvatarStateMachineElement elt : elts) {
-            if (elt.getName().equals(_name)) return elt;
-        }
-        return null;
-    }
-
-    public AvatarStateMachineElement getElementFromUUID(AvatarSpecification _avspec, String _uuid) {
-        AvatarStateMachine asm = getAvatarStateMachine(_avspec);
-        List<AvatarStateMachineElement> elts = asm.getListOfElements();
-        for (AvatarStateMachineElement elt : elts) {
-            UUID eltUUID = elt.getUUID();
-            UUID uuid = UUID.fromString(_uuid);
-            if (eltUUID != null) {
-                if (eltUUID.equals(uuid)) return elt;
-            }
-        }
-        return null;
+public abstract class StateMachineElementMutation extends BlockElementMutation {
 
+    protected StateMachineElementMutation(String _blockName) {
+        super(_blockName);
     }
 
-    public AvatarStateMachineElement getElement(AvatarSpecification _avspec, int _type, String _name) {
-        if (_type == NAME_TYPE) return getElementFromName(_avspec, _name);
-        if (_type == UUID_TYPE) return getElementFromUUID(_avspec, _name);
-        return null;
+    protected AvatarStateMachine getAvatarStateMachine(AvatarSpecification _avspec) {
+        AvatarBlock block = getBlock(_avspec);
+        return block.getStateMachine();
     }
 }
diff --git a/src/main/java/avatartranslator/mutation/StateMutation.java b/src/main/java/avatartranslator/mutation/StateMutation.java
index e79bb03294..b52c588b07 100644
--- a/src/main/java/avatartranslator/mutation/StateMutation.java
+++ b/src/main/java/avatartranslator/mutation/StateMutation.java
@@ -49,19 +49,25 @@ import avatartranslator.*;
  */
 
 public abstract class StateMutation extends StateMachineElementMutation {
-    private String name;
 
-    public void setName(String _name) {
-        name = _name;
+    protected StateMutation(String _blockName, String _stateName) {
+        super(_blockName);
+        setStateName(_stateName);
     }
 
-    public String getName() {
-        return name;
+    private String stateName;
+
+    private void setStateName(String _stateName) {
+        stateName = _stateName;
+    }
+
+    public String getStateName() {
+        return stateName;
     }
 
     public AvatarState getElement(AvatarSpecification _avspec) {
         AvatarStateMachine asm = getAvatarStateMachine(_avspec);
-        AvatarState state = asm.getStateWithName(getName());
+        AvatarState state = asm.getStateWithName(getStateName());
         return state;
     }
     
diff --git a/src/main/java/avatartranslator/mutation/SwapActionMutation.java b/src/main/java/avatartranslator/mutation/SwapActionMutation.java
index 6148bb04a5..8587b9ea14 100644
--- a/src/main/java/avatartranslator/mutation/SwapActionMutation.java
+++ b/src/main/java/avatartranslator/mutation/SwapActionMutation.java
@@ -54,28 +54,32 @@ import avatartranslator.*;
 
 public class SwapActionMutation extends ActionMutation implements MdMutation {
 
-    private int maxIndex;
+    private int index2;
 
-    public SwapActionMutation(String _blockName, int _index1, int _index2) {
-        int minIndex = Math.min(_index1, _index2);
-        int maxIndex = Math.max(_index1, _index2);
+    public SwapActionMutation(String _blockName, String _fromString, int _fromType, String _toString, int _toType, int _index1, int _index2) {
+        super(_blockName, _fromString, _fromType, _toString, _toType, _index1);
+        index2 = _index2;
+    }
 
-        setBlockName(_blockName);
-        setIndex(minIndex);
-        this.maxIndex = maxIndex;
-        initActions();
+    public SwapActionMutation(String _blockName, String _transitionString, int _transitionType, int _index1, int _index2) {
+        super(_blockName, _transitionString, _transitionType, _index1);
+        index2 = _index2;
     }
 
     public void apply(AvatarSpecification _avspec) {
         AvatarTransition transition = getElement(_avspec);
         List<AvatarAction> actions = transition.getActions();
-        AvatarAction action1 = actions.get(getIndex());
+
+        int minIndex = Math.min(getIndex(), index2);
+        int maxIndex = Math.max(getIndex(), index2);
+
+        AvatarAction action1 = actions.get(minIndex);
         AvatarAction action2 = actions.get(maxIndex);
 
-        actions.remove(getIndex());
+        actions.remove(minIndex);
         actions.remove(maxIndex);
 
-        actions.add(getIndex(), action2);
+        actions.add(minIndex, action2);
         actions.add(maxIndex, action1);
     }
 }
\ No newline at end of file
diff --git a/src/main/java/avatartranslator/mutation/TimerOperatorMutation.java b/src/main/java/avatartranslator/mutation/TimerOperatorMutation.java
index 2c088e266a..2fb7ccbec5 100644
--- a/src/main/java/avatartranslator/mutation/TimerOperatorMutation.java
+++ b/src/main/java/avatartranslator/mutation/TimerOperatorMutation.java
@@ -48,45 +48,34 @@ import avatartranslator.*;
  * @version 1.0 28/06/2022
  */
 
-public abstract class TimerOperatorMutation extends StateMachineElementMutation {
+public abstract class TimerOperatorMutation extends UnnamedStateMachineElementMutation {
 
-    private String timerName;
-    private String name = "";
-    private int nameType = UNDEFINED_TYPE;
-    
-    public String getTimerName() {
-        return timerName;
-    }
-
-    public void setTimerName(String _name) {
-        timerName = _name;
+    protected TimerOperatorMutation(String _blockName, String _timerName) {
+        super(_blockName);
+        setTimerName(_timerName);
     }
 
-    public String getName() {
-        return name;
+    protected TimerOperatorMutation(String _blockName, String _name, int _nameType) {
+        super(_blockName, _name, _nameType);
     }
 
-    public boolean isNameSet() {
-        return nameType != UNDEFINED_TYPE;
+    protected TimerOperatorMutation(String _blockName, String _name, int _nameType, String _timerName) {
+        this(_blockName, _name, _nameType);
+        setTimerName(_timerName);
     }
 
-    public void setName(String _name) {
-        name = _name;
-        nameType = NAME_TYPE;
-    }
-
-    public void setUUID(String _name) {
-        name = _name;
-        nameType = UUID_TYPE;
+    private String timerName;
+    
+    protected String getTimerName() {
+        return timerName;
     }
 
-    public AvatarAttribute getAttribute(AvatarSpecification _avspec, String _timerName) {
-        AvatarBlock block = getBlock(_avspec);
-        return block.getAvatarAttributeWithName(_timerName);
+    private void setTimerName(String _name) {
+        timerName = _name;
     }
     
     public AvatarTimerOperator getElement(AvatarSpecification _avspec) {
-        return (AvatarTimerOperator)getElement(_avspec, nameType, name);
+        return (AvatarTimerOperator)super.getElement(_avspec);
     }
     
 }
diff --git a/src/main/java/avatartranslator/mutation/TransitionMutation.java b/src/main/java/avatartranslator/mutation/TransitionMutation.java
index e688c8aaeb..7c41f77e2a 100644
--- a/src/main/java/avatartranslator/mutation/TransitionMutation.java
+++ b/src/main/java/avatartranslator/mutation/TransitionMutation.java
@@ -52,15 +52,33 @@ import java.util.List;
  * @version 1.0 27/06/2022
  */
 
-public abstract class TransitionMutation extends StateMachineElementMutation {
+public abstract class TransitionMutation extends UnnamedStateMachineElementMutation {
+
+    protected TransitionMutation(String _blockName, String _fromString, int _fromType, String _toString, int _toType) {
+        super(_blockName);
+        setFrom(_fromString, _fromType);
+        setTo(_toString, _toType);
+        initActions();
+    }
+
+    protected TransitionMutation(String _blockName, String _transitionString, int _transitionType) {
+        super(_blockName);
+        setTransition(_transitionString, _transitionType);
+        initActions();
+    }
+
+    protected TransitionMutation(String _blockName, String _fromString, int _fromType, String _toString, int _toType, String _transitionString, int _transitionType) {
+        this(_blockName, _fromString, _fromType, _toString, _toType);
+        setTransition(_transitionString, _transitionType);
+    }
     
     private String fromString;
     private String toString;
-    private String nameString;
+    private String transitionString;
 
     private int fromType = UNDEFINED_TYPE;
     private int toType = UNDEFINED_TYPE;
-    private int nameType = UNDEFINED_TYPE;
+    private int transitionType = UNDEFINED_TYPE;
 
     private double probability;
     private boolean probabilitySet = false;
@@ -81,32 +99,27 @@ public abstract class TransitionMutation extends StateMachineElementMutation {
     private List<String> actions; // actions on variable, or method call
     private boolean actionsSet = false;
 
-    private void setFrom(String _name) {
-        fromString = _name;
-    }
-
-    public void setFromWithName(String _name) {
-        setFrom(_name);
-        fromType = NAME_TYPE;
+    private void setFrom(String _fromString) {
+        fromString = _fromString;
     }
 
-    public void setFromWithUUID(String _uuid) {
-        setFrom(_uuid);
-        fromType = UUID_TYPE;
+    private void setFrom(String _fromString, int _fromType) {
+        setFrom(_fromString);
+        fromType = _fromType;
     }
 
-    public String getFrom() {
+    protected String getFrom() {
         return fromString;
     }
 
-    public AvatarStateMachineElement getFromElement(AvatarSpecification _avspec) {
+    protected AvatarStateMachineElement getFromElement(AvatarSpecification _avspec) {
         if (isFromSet()) return getElement(_avspec, fromType, fromString);
         AvatarTransition trans = getElement(_avspec);
         AvatarStateMachine asm = getAvatarStateMachine(_avspec);
         return asm.getElementsLeadingTo(trans).get(0);
     }
 
-    public boolean isFromSet() {
+    protected boolean isFromSet() {
         return fromType!=UNDEFINED_TYPE;
     }
 
@@ -114,43 +127,41 @@ public abstract class TransitionMutation extends StateMachineElementMutation {
         toString = _name;
     }
 
-    public void setToWithName(String _name) {
-        setTo(_name);
-        toType = NAME_TYPE;
-    }
-
-    public void setToWithUUID(String _uuid) {
-        setTo(_uuid);
-        toType = UUID_TYPE;
+    private void setTo(String _toString, int _toType) {
+        setTo(_toString);
+        fromType = _toType;
     }
     
-    public String getTo() {
+    protected String getTo() {
         return toString;
     }
 
-    public AvatarStateMachineElement getToElement(AvatarSpecification _avspec) {
+    protected AvatarStateMachineElement getToElement(AvatarSpecification _avspec) {
         if (isToSet()) return getElement(_avspec, toType, toString);
         AvatarTransition trans = getElement(_avspec);
         return trans.getNext(0);
     }
 
-    public boolean isToSet() {
+    protected boolean isToSet() {
         return toType!=UNDEFINED_TYPE;
     }
 
-    public void setName(String _name) {
-        nameString = _name;
-        nameType = NAME_TYPE;
+    private void setTransition(String _transitionString) {
+        transitionString = _transitionString;
+    }
+
+    private void setTransition(String _transitionString, int _transitionType) {
+        setTransition(_transitionString);
+        transitionType = _transitionType;
     }
 
-    public void setUUID(String _uuid) {
-        nameString = _uuid;
-        nameType = UUID_TYPE;
+    protected String getTransition() {
+        if (transitionType == UNDEFINED_TYPE) return "undefined";
+        return transitionString;
     }
 
-    public String getName() {
-        if (nameType == UNDEFINED_TYPE) return "undefined";
-        return nameString;
+    protected boolean isTransitionSet() {
+        return transitionType != UNDEFINED_TYPE;
     }
 
     public void setProbability(double _probability) {
@@ -158,11 +169,11 @@ public abstract class TransitionMutation extends StateMachineElementMutation {
         probabilitySet = true;
     }
 
-    public boolean isProbabilitySet() {
+    protected boolean isProbabilitySet() {
         return probabilitySet;
     }
 
-    public double getProbability() {
+    protected double getProbability() {
         return probability;
     }
 
@@ -171,15 +182,15 @@ public abstract class TransitionMutation extends StateMachineElementMutation {
         guardSet = true;
     }
 
-    public boolean isGuardSet() {
+    protected boolean isGuardSet() {
         return guardSet;
     }
 
-    public String getGuard() {
+    protected String getGuard() {
         return guard;
     }
 
-    public AvatarGuard getAvatarGuard(AvatarSpecification _avspec) {
+    protected AvatarGuard getAvatarGuard(AvatarSpecification _avspec) {
         return AvatarGuard.createFromString(getBlock(_avspec), getGuard());
     }
 
@@ -189,35 +200,35 @@ public abstract class TransitionMutation extends StateMachineElementMutation {
         delaysSet = true;
     }
 
-    public boolean areDelaysSet() {
+    protected boolean areDelaysSet() {
         return delaysSet;
     }
 
-    public String getMinDelay() {
+    protected String getMinDelay() {
         return minDelay;
     }
 
-    public String getMaxDelay() {
+    protected String getMaxDelay() {
         if (maxDelay.trim().length() == 0) {
             return getMinDelay();
         }
         return maxDelay;
     }
 
-    public void setDelayExtra(String _delayExtra) {
+    protected void setDelayExtra(String _delayExtra) {
         delayExtra1 = _delayExtra;
     }
 
-    public void setDelayExtras(String _delayExtra1, String _delayExtra2) {
+    protected void setDelayExtras(String _delayExtra1, String _delayExtra2) {
         setDelayExtra(_delayExtra1);
         delayExtra2 = _delayExtra2;
     }
 
-    public String getDelayExtra1() {
+    protected String getDelayExtra1() {
         return delayExtra1;
     }
 
-    public String getDelayExtra2() {
+    protected String getDelayExtra2() {
         return delayExtra2;
     }
 
@@ -225,17 +236,22 @@ public abstract class TransitionMutation extends StateMachineElementMutation {
         delayDistributionLaw = _law;
         delayDistributionLawSet = true;
     }
+    
+    public void setDelayDistributionLaw(int _law, String _delayExtra1) {
+        setDelayDistributionLaw(_law);
+        setDelayExtra(_delayExtra1);
+    }
 
     public void setDelayDistributionLaw(int _law, String _delayExtra1, String _delayExtra2) {
         setDelayDistributionLaw(_law);
         setDelayExtras(_delayExtra1, _delayExtra2);
     }
 
-    public boolean isDelayDistributionLawSet() {
+    protected boolean isDelayDistributionLawSet() {
         return delayDistributionLawSet;
     }
 
-    public int getDelayDistributionLaw() {
+    protected int getDelayDistributionLaw() {
         return delayDistributionLaw;
     }
 
@@ -245,22 +261,22 @@ public abstract class TransitionMutation extends StateMachineElementMutation {
         computesSet = true;
     }
 
-    public boolean areComputesSet() {
+    protected boolean areComputesSet() {
         return computesSet;
     }
 
-    public String getMinCompute() {
+    protected String getMinCompute() {
         return minCompute;
     }
 
-    public String getMaxCompute() {
+    protected String getMaxCompute() {
         if (maxCompute.trim().length() == 0) {
             return getMinCompute();
         }
         return maxCompute;
     }
 
-    public void initActions() {
+    private void initActions() {
         actions = new LinkedList<>();
     }
 
@@ -274,21 +290,21 @@ public abstract class TransitionMutation extends StateMachineElementMutation {
         actionsSet = true;
     }
 
-    public boolean areActionsSet() {
+    protected boolean areActionsSet() {
         return actionsSet;
     }
 
-    public List<String> getActions() {
+    protected List<String> getActions() {
         return actions;
     }
 
-    public String getAction(int _index) {
+    protected String getAction(int _index) {
         return getActions().get(_index);
     }
 
     public AvatarTransition getElement(AvatarSpecification _avspec) {
         //TraceManager.addDev(String.valueOf(nameType));
-        if (nameType == UNDEFINED_TYPE) {
+        if (transitionType == UNDEFINED_TYPE) {
             AvatarStateMachineElement fromElement = getElement(_avspec, fromType, fromString);
             //TraceManager.addDev(fromElement.toString());
             AvatarStateMachineElement toElement = getElement(_avspec, toType, toString);
@@ -338,7 +354,7 @@ public abstract class TransitionMutation extends StateMachineElementMutation {
             }
             return null;
         }
-        AvatarStateMachineElement element = getElement(_avspec, nameType, nameString);
+        AvatarStateMachineElement element = getElement(_avspec, transitionType, transitionString);
         if (element != null && element instanceof AvatarTransition) return (AvatarTransition)element;
         return null;
     }
diff --git a/src/main/java/avatartranslator/mutation/UnnamedElementMutation.java b/src/main/java/avatartranslator/mutation/UnnamedElementMutation.java
index 66fd6df4e9..50f34ae4b2 100644
--- a/src/main/java/avatartranslator/mutation/UnnamedElementMutation.java
+++ b/src/main/java/avatartranslator/mutation/UnnamedElementMutation.java
@@ -38,8 +38,6 @@
 
 package avatartranslator.mutation;
 
-import java.util.List;
-
 import avatartranslator.*;
 
 /**
diff --git a/src/main/java/avatartranslator/mutation/UnnamedStateMachineElementMutation.java b/src/main/java/avatartranslator/mutation/UnnamedStateMachineElementMutation.java
new file mode 100644
index 0000000000..942fe4c8c8
--- /dev/null
+++ b/src/main/java/avatartranslator/mutation/UnnamedStateMachineElementMutation.java
@@ -0,0 +1,121 @@
+/* Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Ludovic Apvrille
+ * 
+ * ludovic.apvrille AT enst.fr
+ * 
+ * This software is a computer program whose purpose is to allow the
+ * edition of TURTLE analysis, design and deployment diagrams, to
+ * allow the generation of RT-LOTOS or Java code from this diagram,
+ * and at last to allow the analysis of formal validation traces
+ * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP
+ * from INRIA Rhone-Alpes.
+ * 
+ * This software is governed by the CeCILL  license under French law and
+ * abiding by the rules of distribution of free software.  You can  use,
+ * modify and/ or redistribute the software under the terms of the CeCILL
+ * license as circulated by CEA, CNRS and INRIA at the following URL
+ * "http://www.cecill.info".
+ * 
+ * As a counterpart to the access to the source code and  rights to copy,
+ * modify and redistribute granted by the license, users are provided only
+ * with a limited warranty  and the software's author,  the holder of the
+ * economic rights,  and the successive licensors  have only  limited
+ * liability.
+ * 
+ * In this respect, the user's attention is drawn to the risks associated
+ * with loading,  using,  modifying and/or developing or reproducing the
+ * software by the user in light of its specific status of free software,
+ * that may mean  that it is complicated to manipulate,  and  that  also
+ * therefore means  that it is reserved for developers  and  experienced
+ * professionals having in-depth computer knowledge. Users are therefore
+ * encouraged to load and test the software's suitability as regards their
+ * requirements in conditions enabling the security of their systems and/or
+ * data to be ensured and,  more generally, to use and operate it in the
+ * same conditions as regards security.
+ * 
+ * The fact that you are presently reading this means that you have had
+ * knowledge of the CeCILL license and that you accept its terms.
+ */
+
+package avatartranslator.mutation;
+
+import avatartranslator.*;
+
+import java.util.List;
+import java.util.UUID;
+
+/**
+ * Class OperatorMutation
+ * Creation: 30/06/2022
+ *
+ * @author Léon FRENOT
+ * @version 1.0 30/06/2022
+ */
+
+public abstract class UnnamedStateMachineElementMutation extends StateMachineElementMutation implements UnnamedElementMutation {
+
+    protected UnnamedStateMachineElementMutation(String _blockName) {
+        super(_blockName);
+    }
+
+    protected UnnamedStateMachineElementMutation(String _blockName, String _name, int _nameType) {
+        super(_blockName);
+        setName(_name, _nameType);
+    }
+
+    private String name = "";
+    private int nameType = UNDEFINED_TYPE;
+
+    protected String getName() {
+        return name;
+    }
+
+    protected boolean isNameSet() {
+        return nameType != UNDEFINED_TYPE;
+    }
+
+    protected int getNameType() {
+        return nameType;
+    }
+
+    private void setName(String _name) {
+        name = _name;
+    }
+
+    private void setName(String _name, int _nameType) {
+        setName(_name);
+        nameType = _nameType;
+    }
+
+    private AvatarStateMachineElement getElementFromName(AvatarSpecification _avspec, String _name) {
+        AvatarStateMachine asm = getAvatarStateMachine(_avspec);
+        List<AvatarStateMachineElement> elts = asm.getListOfElements();
+        for (AvatarStateMachineElement elt : elts) {
+            if (elt.getName().equals(_name)) return elt;
+        }
+        return null;
+    }
+
+    private AvatarStateMachineElement getElementFromUUID(AvatarSpecification _avspec, String _uuid) {
+        AvatarStateMachine asm = getAvatarStateMachine(_avspec);
+        List<AvatarStateMachineElement> elts = asm.getListOfElements();
+        for (AvatarStateMachineElement elt : elts) {
+            UUID eltUUID = elt.getUUID();
+            UUID uuid = UUID.fromString(_uuid);
+            if (eltUUID != null) {
+                if (eltUUID.equals(uuid)) return elt;
+            }
+        }
+        return null;
+    }
+
+    public AvatarStateMachineElement getElement(AvatarSpecification _avspec, int _type, String _name) {
+        if (_type == NAME_TYPE) return getElementFromName(_avspec, _name);
+        if (_type == UUID_TYPE) return getElementFromUUID(_avspec, _name);
+        return null;
+    }
+
+    public AvatarStateMachineElement getElement(AvatarSpecification _avspec) {
+        return getElement(_avspec, getNameType(), getName());
+    }
+
+}
\ No newline at end of file
-- 
GitLab