diff --git a/build.txt b/build.txt
index 40362824b3b89c1b38ff5fc88e69bffda884a3ff..d53d32a34931852d1fa0fb8ac80b8ef01a2fa555 100644
--- a/build.txt
+++ b/build.txt
@@ -1 +1 @@
-14815
\ No newline at end of file
+14820
\ No newline at end of file
diff --git a/src/main/java/attacktrees/Defense.java b/src/main/java/attacktrees/Defense.java
index 80524661dca7cc8218037697338a51f3a8838a0d..8b5cf87f4ebb1c7aab200f44173ee266d3f39ce2 100644
--- a/src/main/java/attacktrees/Defense.java
+++ b/src/main/java/attacktrees/Defense.java
@@ -85,6 +85,14 @@ public class Defense extends AttackElement {
                 relatedAttacks.add(_attack);
     }
 
+    public boolean hasRelatedAttacks() {
+        if (relatedAttacks == null) {
+            return false;
+        }
+
+        return relatedAttacks.size() > 0;
+    }
+
     public ArrayList<Attack> getRelatedAttacks() {
         return relatedAttacks;
     }
diff --git a/src/main/java/ui/AvatarMethod.java b/src/main/java/ui/AvatarMethod.java
index dfa8eb862dbffbbe401d4d53ca1edc133da85878..84ef5c782b5c420b2600f6c2a24fad1b5039453f 100644
--- a/src/main/java/ui/AvatarMethod.java
+++ b/src/main/java/ui/AvatarMethod.java
@@ -111,6 +111,8 @@ public class AvatarMethod {
 
         //TraceManager.addDev("Is a valid method? " + _method);
 
+
+
         String method, tmp, id;
         String rt = "";
 
@@ -337,19 +339,17 @@ public class AvatarMethod {
         }
 
         if (checkTypes) {
-            TraceManager.addDev("Checking types with lowerid=" + lowerid);
-            b4 = !((lowerid.equals(getStringType(0).toLowerCase())) || (lowerid.equals(getStringType(1).toLowerCase())) ||
-                    (lowerid.equals(getStringType(2).toLowerCase())) || (lowerid.equals(getStringType(3).toLowerCase())) ||
-                    (lowerid.equals(getStringType(4).toLowerCase())));
-
-            TraceManager.addDev("b4=" + b4 + " extraTypes=" + extraTypes);
-            if (extraTypes != null) {
-                TraceManager.addDev("Checking extra types, with extraTypes = " + extraTypes);
+            //TraceManager.addDev("Checking types with lowerid=" + lowerid);
+            b4 = ((lowerid.equals(getStringType(INTEGER).toLowerCase())) || (lowerid.equals(getStringType(BOOLEAN).toLowerCase())));
+
+            //TraceManager.addDev("b4=" + b4 + " extraTypes=" + extraTypes);
+            if ((extraTypes != null) && (b4 == false)){
+                //TraceManager.addDev("Checking extra types, with extraTypes = " + extraTypes);
                 for(String type: extraTypes) {
                     String typ = type.toLowerCase();
-                    TraceManager.addDev("Comparing type >" + typ + "< with >" + lowerid + "<");
+                    //TraceManager.addDev("Comparing type >" + typ + "< with >" + lowerid + "<");
                     if (type.toLowerCase().compareTo(lowerid) == 0) {
-                        TraceManager.addDev("Similar type");
+                        //TraceManager.addDev("Similar type");
                         b4 = true;
                         break;
                     }
diff --git a/src/main/java/ui/AvatarPanelDrawer.java b/src/main/java/ui/AvatarPanelDrawer.java
index 3b1b6037c0076dfbd7a87e9191c059e933877359..796a54cd7640377ae5d6a539a70f0b1b18b065c0 100644
--- a/src/main/java/ui/AvatarPanelDrawer.java
+++ b/src/main/java/ui/AvatarPanelDrawer.java
@@ -555,6 +555,8 @@ public class AvatarPanelDrawer {
 				SMDCon.setTransitionInfo("", t.getAction(i, useOriginalValuesFirst).replaceAll(" ", ""));
 			}
 
+			SMDCon.setTransitionProbability(t.getDelayDistributionLaw(), t.getDelayExtra1(), t.getDelayExtra2());
+
 			smp.addComponent(SMDCon, p1.getX(), p1.getY(), false, true);
 
 			if (t.getOtherReferenceObjects() != null) {
diff --git a/src/main/java/ui/MainGUI.java b/src/main/java/ui/MainGUI.java
index 867acb410d5d90250b2086c2d23b16bf14074ee1..b55c6ff3116a055020d7062542d73af46f3010d6 100644
--- a/src/main/java/ui/MainGUI.java
+++ b/src/main/java/ui/MainGUI.java
@@ -1903,7 +1903,7 @@ public class MainGUI implements ActionListener, WindowListener, KeyListener, Per
         atp.addAttackTreeDiagram(tabName);
         atp.atdp.drawable = false;
         atp.atdp.drawFromAttackTreeModel(_at);
-        atp.atdp.drawConnectionlessAttacks(_at);
+        //atp.atdp.drawConnectionlessAttacks(_at);
         atp.atdp.drawable = true;
         atp.atdp.repaint();
         TraceManager.addDev("Draw AT 4");
diff --git a/src/main/java/ui/atd/AttackTreeDiagramPanel.java b/src/main/java/ui/atd/AttackTreeDiagramPanel.java
index 323bf128b2c166a645279e09f069570a159db38f..c0eab5aa4e5d1a6dc83e1501c772fda177c2548e 100644
--- a/src/main/java/ui/atd/AttackTreeDiagramPanel.java
+++ b/src/main/java/ui/atd/AttackTreeDiagramPanel.java
@@ -43,10 +43,7 @@ package ui.atd;
 
 //import java.awt.*;
 
-import attacktrees.Attack;
-import attacktrees.AttackElement;
-import attacktrees.AttackNode;
-import attacktrees.AttackTree;
+import attacktrees.*;
 import avatartranslator.AvatarElement;
 import avatartranslator.avatarucd.AvatarActor;
 import myutil.NameChecker;
@@ -213,8 +210,11 @@ public class AttackTreeDiagramPanel extends TDiagramPanel implements TDPWithAttr
 
         HashMap<AttackElement, TGComponent> mapOfComponents = new HashMap<>();
 
+        String ret = drawAttackFromAttackTreeModel(mapOfComponents, _at, root, null, -1, 600, 100, 1200);
+        drawConnectionlessAttacks(_at);
+
+        return ret;
 
-        return drawAttackFromAttackTreeModel(mapOfComponents, _at, root, null, -1, 600, 100, 1200);
     }
 
     public void drawConnectionlessAttacks(AttackTree _at) {
@@ -300,8 +300,7 @@ public class AttackTreeDiagramPanel extends TDiagramPanel implements TDPWithAttr
             TGConnectingPoint p2 = attack.closerFreeTGConnectingPoint(constraint.getX(), constraint.getY(), true, false);
 
             if (p1 != null && p2 != null) {
-                p1.setFree(false);
-                p2.setFree(false);
+
 
                 TGConnector conn = null;
                 Vector<Point> points = new Vector<Point>();
@@ -312,6 +311,8 @@ public class AttackTreeDiagramPanel extends TDiagramPanel implements TDPWithAttr
                 }
 
                 if (conn != null) {
+                    p1.setFree(false);
+                    p2.setFree(false);
                     addComponent(conn, 0, 0, false, true);
                 }
             }
@@ -334,6 +335,59 @@ public class AttackTreeDiagramPanel extends TDiagramPanel implements TDPWithAttr
             }
         }
 
+        // Handling countermeasures
+        int xNoRel = 100;
+        int yNoRel = 100;
+        int newX, newY;
+        for(Defense def : _at.getDefenses()) {
+            if (def.hasRelatedAttacks()) {
+                Attack firstAttack = def.getRelatedAttacks().get(0);
+                TGComponent refToAtt = _mapOfComponents.get(firstAttack);
+                if (refToAtt != null) {
+                    newX = refToAtt.getX();
+                    newY = refToAtt.getY() + 100;
+                } else {
+                    newX = xNoRel;
+                    newY = yNoRel;
+                    yNoRel += 100;
+                }
+            } else {
+                newX = xNoRel;
+                newY = yNoRel;
+                yNoRel += 100;
+            }
+            ATDCountermeasure atdc = new ATDCountermeasure(newX, newY, getMinX(), getMaxX(), getMinY(), getMaxY(), true, null, this);
+            atdc.setDescription(def.getDescription());
+            atdc.setEnabled(def.isEnabled());
+            addBuiltComponent(atdc);
+
+            // Connections
+            for(Attack relatedAtt: def.getRelatedAttacks()) {
+                TGComponent refToAtt = _mapOfComponents.get(relatedAtt);
+                if (refToAtt != null) {
+                    TGConnectingPoint p1 = atdc.closerFreeTGConnectingPoint(refToAtt.getX(), refToAtt.getY(), false, true);
+                    TGConnectingPoint p2 = refToAtt.closerFreeTGConnectingPoint(atdc.getX(), atdc.getY(), true, false);
+
+                    if ((p1 != null) && (p2 != null)) {
+                        
+                        TGConnector conn = null;
+                        Vector<Point> points = new Vector<Point>();
+                        conn = new ATDCountermeasureConnector(0, 0, 0, 0, 0, 0, true, null,
+                                this, p1, p2, points);
+                        if (_valueConst != -1) {
+                            conn.setValue("" + _valueConst);
+                        }
+
+                        if (conn != null) {
+                            p1.setFree(false);
+                            p2.setFree(false);
+                            addComponent(conn, 0, 0, false, true);
+                        }
+                    }
+                }
+            }
+        }
+
         return null;
     }
 
diff --git a/src/main/java/ui/avatarsmd/AvatarSMDConnector.java b/src/main/java/ui/avatarsmd/AvatarSMDConnector.java
index 304de32f3e9441aa60a031d5090a021a88bae285..0851cdbc447e8b10cdbeb9d2abe1d0b20e5396ed 100644
--- a/src/main/java/ui/avatarsmd/AvatarSMDConnector.java
+++ b/src/main/java/ui/avatarsmd/AvatarSMDConnector.java
@@ -136,6 +136,12 @@ public class AvatarSMDConnector extends TGConnectorWithCommentConnectionPoints i
         tgc.setTimes(minDelay, maxDelay, minCompute, maxCompute);
     }
 
+    public void setTransitionProbability(int _delayDistributionLaw, String _extraDelay1, String _extraDelay2) {
+        AvatarSMDTransitionInfo ti = getAvatarSMDTransitionInfo();
+        ti.setTransitionProbability(""+_delayDistributionLaw, _extraDelay1, _extraDelay2);
+
+    }
+
     @Override
     protected void drawLastSegment(Graphics g, int x1, int y1, int x2, int y2) {
         if (Point2D.distance(x1, y1, x2, y2) < GraphicLib.longueur * 1.5) {
diff --git a/src/main/java/ui/avatarsmd/AvatarSMDTransitionInfo.java b/src/main/java/ui/avatarsmd/AvatarSMDTransitionInfo.java
index db85bb7d78080e1ba4f9ce3cf927d61f405897a4..ed1f4e8a6ab4f6970d70579f1b8269e5fa99839e 100755
--- a/src/main/java/ui/avatarsmd/AvatarSMDTransitionInfo.java
+++ b/src/main/java/ui/avatarsmd/AvatarSMDTransitionInfo.java
@@ -930,6 +930,11 @@ public class AvatarSMDTransitionInfo extends TGCWithoutInternalComponent impleme
         return extraDelay2.getText();
     }
 
+    public void setTransitionProbability(String _delayDistributionLaw, String _extraDelay1, String _extraDelay2) {
+        delayDistributionLaw.setText(_delayDistributionLaw);
+        extraDelay1.setText(_extraDelay1);
+        extraDelay2.setText(_extraDelay2);
+    }
 
     /**
      * Issue #69
diff --git a/src/main/java/ui/util/DefaultText.java b/src/main/java/ui/util/DefaultText.java
index bfbe4de0454dd1258836226f9cc29bb404042065..3fea22214118f71cafc699d4a854fc8254d5df19 100755
--- a/src/main/java/ui/util/DefaultText.java
+++ b/src/main/java/ui/util/DefaultText.java
@@ -50,8 +50,8 @@ package ui.util;
  */
 public class DefaultText {
 
-    public static String BUILD = "14814";
-    public static String DATE = "2024/06/19 03:22:26 CET";
+    public static String BUILD = "14819";
+    public static String DATE = "2024/06/24 03:22:02 CET";
 
     public static StringBuffer sbAbout = makeAbout();
 
diff --git a/src/main/java/ui/window/JFrameAI.java b/src/main/java/ui/window/JFrameAI.java
index 1747fee572c6e1294501edb21ebf1df6e2c65b85..c68aaef29b1c97adc45936424c098fe4cb7ecbf9 100644
--- a/src/main/java/ui/window/JFrameAI.java
+++ b/src/main/java/ui/window/JFrameAI.java
@@ -663,7 +663,7 @@ public class JFrameAI extends JFrame implements ActionListener {
 
         TraceManager.addDev("\n\nSpecification to draw: " + ((AvatarSpecification) input).toString() + "\n\n");
 
-        mgui.drawAvatarSpecification((AvatarSpecification) input, false);
+        mgui.drawAvatarSpecification((AvatarSpecification) input, false, false);
         inform("State machine of blocks added to diagram from ai answer\n");
     }