diff --git a/src/main/java/ui/AvatarPanelDrawer.java b/src/main/java/ui/AvatarPanelDrawer.java
index da3517b76a94354629f173c06d13f0d19293846b..6922d436392e031e9fc066c0b2c232c4f2f4d809 100644
--- a/src/main/java/ui/AvatarPanelDrawer.java
+++ b/src/main/java/ui/AvatarPanelDrawer.java
@@ -67,7 +67,7 @@ public class AvatarPanelDrawer {
 
 	public AvatarPanelDrawer() {
 	}
-	
+
 	public void drawPanel(AvatarSpecification avspec, AvatarDesignPanel adp, boolean useOriginalValuesFirst, boolean useOriginalPositionSMD) {
 		//
 		// Check Errors in AVSPEC
@@ -93,6 +93,7 @@ public class AvatarPanelDrawer {
 			return;
 		}
 		AvatarBDPanel abd = adp.abdp;
+		abd.getTdmm().setOn(false);
 
 		//Find all blocks, create nested blocks starting from top left
 		int xpos = 10;
@@ -146,9 +147,11 @@ public class AvatarPanelDrawer {
 						}
 						drawBlockProperties(avspec, ab, bl, useOriginalValuesFirst);
 						AvatarSMDPanel smp = adp.getAvatarSMDPanel(bl.getValue());
+						smp.getTdmm().setOn(false);
 						//TraceManager.addDev("\nBuilding state machine of block " + ab.getName() + " smd:" + ab.getStateMachine().toString() + "\n" +
 						//       "\n");
 						buildStateMachine(ab, bl, smp, useOriginalValuesFirst, useOriginalPositionSMD);
+						smp.getTdmm().setOn(true);
 						//TraceManager.addDev("Putting in block")
 						blockMap.put(bl.getValue().split("__")[bl.getValue().split("__").length - 1], bl);
 						xpos += 100 * blockSizeMap.get(ab) + 200;
@@ -400,6 +403,7 @@ public class AvatarPanelDrawer {
 		}
 
 		adp.getAvatarBDPanel().connectSignals();
+		abd.getTdmm().setOn(true);
 		adp.getAvatarBDPanel().repaint();
 
 	}
diff --git a/src/main/java/ui/TDiagramMouseManager.java b/src/main/java/ui/TDiagramMouseManager.java
index eec310d7917e5467a4980c90397ffb24b0c99520..67beb35203ada5e9bca4a5d6f6916f353fed6686 100644
--- a/src/main/java/ui/TDiagramMouseManager.java
+++ b/src/main/java/ui/TDiagramMouseManager.java
@@ -80,171 +80,180 @@ public class TDiagramMouseManager extends MouseAdapter {//implements MouseListen
     private CDElement[] cde;
     private boolean isOut;
 
+    private boolean isOn;
+
     // Constructor
     public TDiagramMouseManager(TDiagramPanel _tdp) {
         tdp = _tdp;
+        isOn = true;
+    }
+
+    public void setOn(boolean _on) {
+        isOn = _on;
     }
 
     // Mouse operations
     @Override
     public void mousePressed(MouseEvent e) {
-        int selected = tdp.getGUI().getTypeButtonSelected();
-
-        //TraceManager.addDev("Titi");
-        if (e.getButton() == MouseEvent.BUTTON3) {
-            //TraceManager.addDev("toto");
-            if (tdp.mode != TDiagramPanel.SELECTED_COMPONENTS) {
-                setSelection(e.getX(), e.getY());
+        if (isOn) {
+            int selected = tdp.getGUI().getTypeButtonSelected();
+
+            //TraceManager.addDev("Titi");
+            if (e.getButton() == MouseEvent.BUTTON3) {
+                //TraceManager.addDev("toto");
+                if (tdp.mode != TDiagramPanel.SELECTED_COMPONENTS) {
+                    setSelection(e.getX(), e.getY());
+                }
+                tdp.openPopupMenu(e.getX(), e.getY());
             }
-            tdp.openPopupMenu(e.getX(), e.getY());
-        }
 
-        //TraceManager.addDev("mode = " + tdp.mode + " selected=" + selected);
-
-        if ((tdp.mode == TDiagramPanel.SELECTED_COMPONENTS) && (e.getButton() == MouseEvent.BUTTON1) && (tdp.isInSelectedRectangle(e.getX(), e.getY()))) {
-            tdp.setCursor(Cursor.getPredefinedCursor(Cursor.MOVE_CURSOR));
-            tdp.mode = TDiagramPanel.MOVING_SELECTED_COMPONENTS;
-            tdp.setMovingSelectedComponents();
-            cdx = tdp.getXSelected();
-            cdy = tdp.getYSelected();
-            oldx = cdx;
-            oldy = cdy;
-            decx = e.getX() - cdx;
-            decy = e.getY() - cdy;
-        }
+            //TraceManager.addDev("mode = " + tdp.mode + " selected=" + selected);
+
+            if ((tdp.mode == TDiagramPanel.SELECTED_COMPONENTS) && (e.getButton() == MouseEvent.BUTTON1) && (tdp.isInSelectedRectangle(e.getX(), e.getY()))) {
+                tdp.setCursor(Cursor.getPredefinedCursor(Cursor.MOVE_CURSOR));
+                tdp.mode = TDiagramPanel.MOVING_SELECTED_COMPONENTS;
+                tdp.setMovingSelectedComponents();
+                cdx = tdp.getXSelected();
+                cdy = tdp.getYSelected();
+                oldx = cdx;
+                oldy = cdy;
+                decx = e.getX() - cdx;
+                decy = e.getY() - cdy;
+            }
 
 
-        if ((tdp.mode == TDiagramPanel.NORMAL) && (selected == TGComponentManager.EDIT) & (e.getButton() == MouseEvent.BUTTON1)) {
-            setSelection(e.getX(), e.getY());
-            //search if an element is pointed
-            boolean actionMade = false;
-            tgc = tdp.componentPointed();
-            //TraceManager.addDev("Working on TGC=" + tgc);
-            if (tgc == null) {
-                // making a selection of components
-                tdp.setCursor(Cursor.getPredefinedCursor(Cursor.CROSSHAIR_CURSOR));
-                tdp.mode = TDiagramPanel.SELECTING_COMPONENTS;
-                tdp.setSelectingComponents(e.getX(), e.getY());
-            } else {
-                tdp.mgui.actions[TGUIAction.ACT_DELETE].setEnabled(true);
-                // Resize, move, or make a connector
-                if (tgc.isUserResizable() && ((resizeInfo = tgc.getResizeZone(e.getX(), e.getY())) != 0)) {
-                    actionMade = true;
-                    // Resize
-                    //TraceManager.addDev("Resize");
-                    tgc.setState(TGState.RESIZING);
-                    tgc.updateMinMaxSize();
-                    //tdp.setCursor(Cursor.getPredefinedCursor(Cursor.MOVE_CURSOR));
-                    tdp.mode = TDiagramPanel.RESIZING_COMPONENT;
-                    cdx = tgc.getX();
-                    cdy = tgc.getY();
-                    cdwidth = tgc.getWidth();
-                    cdheight = tgc.getHeight();
-                    oldx = cdx;
-                    oldy = cdy;
-                    oldwidth = cdwidth;
-                    oldheight = cdheight;
-                    decx = e.getX() - cdx;
-                    decy = e.getY() - cdy;
-                }
+            if ((tdp.mode == TDiagramPanel.NORMAL) && (selected == TGComponentManager.EDIT) & (e.getButton() == MouseEvent.BUTTON1)) {
+                setSelection(e.getX(), e.getY());
+                //search if an element is pointed
+                boolean actionMade = false;
+                tgc = tdp.componentPointed();
+                //TraceManager.addDev("Working on TGC=" + tgc);
+                if (tgc == null) {
+                    // making a selection of components
+                    tdp.setCursor(Cursor.getPredefinedCursor(Cursor.CROSSHAIR_CURSOR));
+                    tdp.mode = TDiagramPanel.SELECTING_COMPONENTS;
+                    tdp.setSelectingComponents(e.getX(), e.getY());
+                } else {
+                    tdp.mgui.actions[TGUIAction.ACT_DELETE].setEnabled(true);
+                    // Resize, move, or make a connector
+                    if (tgc.isUserResizable() && ((resizeInfo = tgc.getResizeZone(e.getX(), e.getY())) != 0)) {
+                        actionMade = true;
+                        // Resize
+                        //TraceManager.addDev("Resize");
+                        tgc.setState(TGState.RESIZING);
+                        tgc.updateMinMaxSize();
+                        //tdp.setCursor(Cursor.getPredefinedCursor(Cursor.MOVE_CURSOR));
+                        tdp.mode = TDiagramPanel.RESIZING_COMPONENT;
+                        cdx = tgc.getX();
+                        cdy = tgc.getY();
+                        cdwidth = tgc.getWidth();
+                        cdheight = tgc.getHeight();
+                        oldx = cdx;
+                        oldy = cdy;
+                        oldwidth = cdwidth;
+                        oldheight = cdheight;
+                        decx = e.getX() - cdx;
+                        decy = e.getY() - cdy;
+                    }
 
-                if (!actionMade) {
-                    TGConnectingPoint p1;
-                    //TraceManager.addDev("Working on TGC=" + tgc);
-                    if (tgc.getDefaultConnector() != -1) {
-                        p1 = tgc.getFreeTGConnectingPointAtAndCompatible(e.getX(), e.getY(), tgc.getDefaultConnector(), null);
-                        if ((p1 != null) && (p1.isOut())) {
-                            // add connector
-                            actionMade = true;
-                            tdp.setSelectedTGConnectingPoint(p1);
-                            tdp.getGUI().actionOnButton(TGComponentManager.CONNECTOR, tgc.getDefaultConnector());
-                            tdp.mode = TDiagramPanel.ADDING_CONNECTOR;
-                            tdp.addingTGConnector();
-                            cp = p1;
-                            tdp.setAddingTGConnector(e.getX(), e.getY());
-                            //tdp.repaint();
-                            setSelection(p1.container.getX(), p1.container.getY());
+                    if (!actionMade) {
+                        TGConnectingPoint p1;
+                        //TraceManager.addDev("Working on TGC=" + tgc);
+                        if (tgc.getDefaultConnector() != -1) {
+                            p1 = tgc.getFreeTGConnectingPointAtAndCompatible(e.getX(), e.getY(), tgc.getDefaultConnector(), null);
+                            if ((p1 != null) && (p1.isOut())) {
+                                // add connector
+                                actionMade = true;
+                                tdp.setSelectedTGConnectingPoint(p1);
+                                tdp.getGUI().actionOnButton(TGComponentManager.CONNECTOR, tgc.getDefaultConnector());
+                                tdp.mode = TDiagramPanel.ADDING_CONNECTOR;
+                                tdp.addingTGConnector();
+                                cp = p1;
+                                tdp.setAddingTGConnector(e.getX(), e.getY());
+                                //tdp.repaint();
+                                setSelection(p1.container.getX(), p1.container.getY());
+                            }
                         }
                     }
-                }
 
-                if ((!actionMade) && (tgc.isMoveable())) {
-                    actionMade = true;
-                    //Move
-                    tgc.setState(TGState.MOVING);
-                    tdp.setCursor(Cursor.getPredefinedCursor(Cursor.MOVE_CURSOR));
-                    tdp.mode = TDiagramPanel.MOVING_COMPONENT;
-                    cdx = tgc.getX();
-                    cdy = tgc.getY();
-                    oldx = cdx;
-                    oldy = cdy;
-                    decx = e.getX() - cdx;
-                    decy = e.getY() - cdy;
-                }
+                    if ((!actionMade) && (tgc.isMoveable())) {
+                        actionMade = true;
+                        //Move
+                        tgc.setState(TGState.MOVING);
+                        tdp.setCursor(Cursor.getPredefinedCursor(Cursor.MOVE_CURSOR));
+                        tdp.mode = TDiagramPanel.MOVING_COMPONENT;
+                        cdx = tgc.getX();
+                        cdy = tgc.getY();
+                        oldx = cdx;
+                        oldy = cdy;
+                        decx = e.getX() - cdx;
+                        decy = e.getY() - cdy;
+                    }
 
-                if ((!actionMade) && (tgc instanceof TGConnector)) {
-                    // moving segment of connector ?
-                    actionMade = true;
-                    tgco = (TGConnector) tgc;
-                    cde = tgco.getPointedSegment(e.getX(), e.getY());
-                    if (cde != null) {
-                        if ((!tgco.isP1(cde[0])) && (!tgco.isP2(cde[1]))) {
-                            // moving segment
-                            tgc.setState(TGState.MOVING);
-                            tdp.setCursor(Cursor.getPredefinedCursor(Cursor.MOVE_CURSOR));
-                            tdp.mode = TDiagramPanel.MOVE_CONNECTOR_SEGMENT;
-                            oldx = cde[0].getX();
-                            oldy = cde[0].getY();
-                            decx = e.getX();
-                            decy = e.getY();
-                        } else {
-                            if ((tgco.isP1(cde[0])) && (tgco.isP2(cde[1]))) {
-                                // we choose one of the two     -> the closer one to the click
-                                cde = tgco.closerPToClickFirst(e.getX(), e.getY());
+                    if ((!actionMade) && (tgc instanceof TGConnector)) {
+                        // moving segment of connector ?
+                        actionMade = true;
+                        tgco = (TGConnector) tgc;
+                        cde = tgco.getPointedSegment(e.getX(), e.getY());
+                        if (cde != null) {
+                            if ((!tgco.isP1(cde[0])) && (!tgco.isP2(cde[1]))) {
+                                // moving segment
+                                tgc.setState(TGState.MOVING);
+                                tdp.setCursor(Cursor.getPredefinedCursor(Cursor.MOVE_CURSOR));
+                                tdp.mode = TDiagramPanel.MOVE_CONNECTOR_SEGMENT;
+                                oldx = cde[0].getX();
+                                oldy = cde[0].getY();
+                                decx = e.getX();
+                                decy = e.getY();
                             } else {
-                                if (tgco.isP2(cde[1])) {
-                                    cde[1] = cde[0];
-                                    cde[0] = tgco.getTGConnectingPointP2();
+                                if ((tgco.isP1(cde[0])) && (tgco.isP2(cde[1]))) {
+                                    // we choose one of the two     -> the closer one to the click
+                                    cde = tgco.closerPToClickFirst(e.getX(), e.getY());
+                                } else {
+                                    if (tgco.isP2(cde[1])) {
+                                        cde[1] = cde[0];
+                                        cde[0] = tgco.getTGConnectingPointP2();
+                                    }
                                 }
-                            }
 
-                            isOut = cde[0] != tgco.getTGConnectingPointP2();
-
-                            // moving connector head
-                            tdp.setMovingHead(e.getX(), e.getY(), cde[1].getX(), cde[1].getY());
-                            tgc.setState(TGState.MOVING);
-                            tdp.setCursor(Cursor.getPredefinedCursor(Cursor.MOVE_CURSOR));
-                            tdp.mode = TDiagramPanel.MOVE_CONNECTOR_HEAD;
-                            tdp.setConnectorHead(tgco);
-                            ((TGConnectingPoint) cde[0]).setFree(true);
-                            //TraceManager.addDev("Moving connector head");
-                            if (isOut) {
-                                tdp.highlightOutAndFreeConnectingPoint(e.getX(), e.getY(), tgc.getType());
-                            } else {
-                                tdp.highlightInAndFreeConnectingPoint(e.getX(), e.getY(), tgc.getType(), tgco.p1);
+                                isOut = cde[0] != tgco.getTGConnectingPointP2();
+
+                                // moving connector head
+                                tdp.setMovingHead(e.getX(), e.getY(), cde[1].getX(), cde[1].getY());
+                                tgc.setState(TGState.MOVING);
+                                tdp.setCursor(Cursor.getPredefinedCursor(Cursor.MOVE_CURSOR));
+                                tdp.mode = TDiagramPanel.MOVE_CONNECTOR_HEAD;
+                                tdp.setConnectorHead(tgco);
+                                ((TGConnectingPoint) cde[0]).setFree(true);
+                                //TraceManager.addDev("Moving connector head");
+                                if (isOut) {
+                                    tdp.highlightOutAndFreeConnectingPoint(e.getX(), e.getY(), tgc.getType());
+                                } else {
+                                    tdp.highlightInAndFreeConnectingPoint(e.getX(), e.getY(), tgc.getType(), tgco.p1);
+                                }
+                                oldx = cde[0].getX();
+                                oldy = cde[0].getY();
+                                decx = e.getX();
+                                decy = e.getY();
                             }
-                            oldx = cde[0].getX();
-                            oldy = cde[0].getY();
-                            decx = e.getX();
-                            decy = e.getY();
                         }
                     }
                 }
             }
-        }
 
 
-        if ((tdp.mode == TDiagramPanel.NORMAL) && (selected == TGComponentManager.CONNECTOR) & (e.getButton() == MouseEvent.BUTTON1)) {
-            // connector adding
-            // search for an selected connecting point
-            TGConnectingPoint p1;
-            p1 = tdp.getSelectedTGConnectingPoint();
-            if ((p1 != null) && (p1.isOut())) {
-                tdp.mode = TDiagramPanel.ADDING_CONNECTOR;
-                tdp.addingTGConnector();
-                cp = p1;
-                tdp.setAddingTGConnector(e.getX(), e.getY());
-                tdp.repaint();
+            if ((tdp.mode == TDiagramPanel.NORMAL) && (selected == TGComponentManager.CONNECTOR) & (e.getButton() == MouseEvent.BUTTON1)) {
+                // connector adding
+                // search for an selected connecting point
+                TGConnectingPoint p1;
+                p1 = tdp.getSelectedTGConnectingPoint();
+                if ((p1 != null) && (p1.isOut())) {
+                    tdp.mode = TDiagramPanel.ADDING_CONNECTOR;
+                    tdp.addingTGConnector();
+                    cp = p1;
+                    tdp.setAddingTGConnector(e.getX(), e.getY());
+                    tdp.repaint();
+                }
             }
         }
 
@@ -252,213 +261,217 @@ public class TDiagramMouseManager extends MouseAdapter {//implements MouseListen
 
     @Override
     public void mouseReleased(MouseEvent e) {
+        if (isOn) {
 
-        if (tdp.mode == TDiagramPanel.MOVING_SELECTED_COMPONENTS) {
-            tdp.mode = TDiagramPanel.SELECTED_COMPONENTS;
-            tdp.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
-            tdp.setStopMovingSelectedComponents();
-            if ((oldx != tdp.getXSelected()) || (oldy != tdp.getYSelected())) {
-                tdp.getGUI().changeMade(tdp, TDiagramPanel.MOVE_COMPONENT);
+            if (tdp.mode == TDiagramPanel.MOVING_SELECTED_COMPONENTS) {
+                tdp.mode = TDiagramPanel.SELECTED_COMPONENTS;
+                tdp.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
+                tdp.setStopMovingSelectedComponents();
+                if ((oldx != tdp.getXSelected()) || (oldy != tdp.getYSelected())) {
+                    tdp.getGUI().changeMade(tdp, TDiagramPanel.MOVE_COMPONENT);
+                }
+                tdp.repaint();
             }
-            tdp.repaint();
-        }
 
-        if (tdp.mode == TDiagramPanel.MOVING_COMPONENT) {
-            tgc.setState(TGState.POINTED);
-            tdp.mode = TDiagramPanel.NORMAL;
-            tdp.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
-            if ((oldx != tgc.getX()) || (oldy != tgc.getY())) {
-                //TraceManager.addDev("change2");
-                tdp.getGUI().changeMade(tdp, TDiagramPanel.MOVE_COMPONENT);
+            if (tdp.mode == TDiagramPanel.MOVING_COMPONENT) {
+                tgc.setState(TGState.POINTED);
+                tdp.mode = TDiagramPanel.NORMAL;
+                tdp.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
+                if ((oldx != tgc.getX()) || (oldy != tgc.getY())) {
+                    //TraceManager.addDev("change2");
+                    tdp.getGUI().changeMade(tdp, TDiagramPanel.MOVE_COMPONENT);
+                }
+                setSelection(e.getX(), e.getY());
             }
-            setSelection(e.getX(), e.getY());
-        }
 
-        if (tdp.mode == TDiagramPanel.RESIZING_COMPONENT) {
-            tgc.setState(TGState.POINTED);
-            tdp.mode = TDiagramPanel.NORMAL;
-            tdp.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
-            if ((oldx != tgc.getX()) || (oldy != tgc.getY()) || (oldwidth != tgc.getWidth()) || (oldheight != tgc.getHeight())) {
-                //TraceManager.addDev("change2");
-                tdp.getGUI().changeMade(tdp, TDiagramPanel.MOVE_COMPONENT);
+            if (tdp.mode == TDiagramPanel.RESIZING_COMPONENT) {
+                tgc.setState(TGState.POINTED);
+                tdp.mode = TDiagramPanel.NORMAL;
+                tdp.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
+                if ((oldx != tgc.getX()) || (oldy != tgc.getY()) || (oldwidth != tgc.getWidth()) || (oldheight != tgc.getHeight())) {
+                    //TraceManager.addDev("change2");
+                    tdp.getGUI().changeMade(tdp, TDiagramPanel.MOVE_COMPONENT);
+                }
+                setSelection(e.getX(), e.getY());
             }
-            setSelection(e.getX(), e.getY());
-        }
 
-        if (tdp.mode == TDiagramPanel.SELECTING_COMPONENTS) {
-            tdp.endSelectComponents();
-            tdp.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
-            tdp.repaint();
-        }
+            if (tdp.mode == TDiagramPanel.SELECTING_COMPONENTS) {
+                tdp.endSelectComponents();
+                tdp.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
+                tdp.repaint();
+            }
 
-        if (tdp.mode == TDiagramPanel.MOVE_CONNECTOR_SEGMENT) {
-            tgc.setState(TGState.POINTED);
-            tdp.mode = TDiagramPanel.NORMAL;
-            tdp.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
-            if ((oldx != cde[0].getX()) || (oldy != cde[0].getY())) {
-                tdp.getGUI().changeMade(tdp, TDiagramPanel.MOVE_COMPONENT);
+            if (tdp.mode == TDiagramPanel.MOVE_CONNECTOR_SEGMENT) {
+                tgc.setState(TGState.POINTED);
+                tdp.mode = TDiagramPanel.NORMAL;
+                tdp.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
+                if ((oldx != cde[0].getX()) || (oldy != cde[0].getY())) {
+                    tdp.getGUI().changeMade(tdp, TDiagramPanel.MOVE_COMPONENT);
+                }
             }
-        }
 
-        if (tdp.mode == TDiagramPanel.MOVE_CONNECTOR_HEAD) {
-            tgc.setState(TGState.POINTED);
-            tdp.mode = TDiagramPanel.NORMAL;
-            TGConnectingPoint p;
-            p = tdp.getSelectedTGConnectingPoint();
-            if (p != null) {
-                ((TGConnectingPoint) cde[0]).setFree(true);
-                p.setFree(false);
-                if (isOut) {
-                    tgco.setP1(p);
+            if (tdp.mode == TDiagramPanel.MOVE_CONNECTOR_HEAD) {
+                tgc.setState(TGState.POINTED);
+                tdp.mode = TDiagramPanel.NORMAL;
+                TGConnectingPoint p;
+                p = tdp.getSelectedTGConnectingPoint();
+                if (p != null) {
+                    ((TGConnectingPoint) cde[0]).setFree(true);
+                    p.setFree(false);
+                    if (isOut) {
+                        tgco.setP1(p);
+                    } else {
+                        tgco.setP2(p);
+                    }
+                    tdp.getGUI().changeMade(tdp, TDiagramPanel.MOVE_CONNECTOR);
+                    if (tgco instanceof SpecificActionAfterMove) {
+                        ((SpecificActionAfterMove) tgco).specificActionAfterMove();
+                    }
                 } else {
-                    tgco.setP2(p);
+                    ((TGConnectingPoint) cde[0]).setFree(false);
                 }
-                tdp.getGUI().changeMade(tdp, TDiagramPanel.MOVE_CONNECTOR);
-                if (tgco instanceof SpecificActionAfterMove) {
-                    ((SpecificActionAfterMove) tgco).specificActionAfterMove();
-                }
-            } else {
-                ((TGConnectingPoint) cde[0]).setFree(false);
+                tdp.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
+                tdp.repaint();
             }
-            tdp.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
-            tdp.repaint();
         }
     }
 
     @Override
     public void mouseClicked(MouseEvent e) {
-        //TraceManager.addDev("MouseClick: " + e.getClickCount());
+        if (isOn) {
+            //TraceManager.addDev("MouseClick: " + e.getClickCount());
 
-        //open a Search Dialog with seleted component's value
-        if ((e.getButton() == MouseEvent.BUTTON1) && e.isAltDown()) {
-            byte info = tdp.hoveredComponent(e.getX(), e.getY());
-            if (info > 1) {
-                tgc = tdp.componentHovered();
-                String search = tgc.getValue();
+            //open a Search Dialog with seleted component's value
+            if ((e.getButton() == MouseEvent.BUTTON1) && e.isAltDown()) {
+                byte info = tdp.hoveredComponent(e.getX(), e.getY());
+                if (info > 1) {
+                    tgc = tdp.componentHovered();
+                    String search = tgc.getValue();
 
-                if (tdp.mgui.searchBox == null) {
-                    tdp.mgui.searchBox = new JDialogSearchBox(tdp.getGUI().getFrame(), "Search Box", selectedMultiComponents, this);
-                } else {
-                    if (tdp.mgui.searchBox.isShowing()) {
-                        tdp.mgui.searchBox.addValueListKeyword(search);
-                        tdp.mgui.searchBox.setVisible(true);
-                    } else {
-                        tdp.mgui.searchBox = null;
+                    if (tdp.mgui.searchBox == null) {
                         tdp.mgui.searchBox = new JDialogSearchBox(tdp.getGUI().getFrame(), "Search Box", selectedMultiComponents, this);
+                    } else {
+                        if (tdp.mgui.searchBox.isShowing()) {
+                            tdp.mgui.searchBox.addValueListKeyword(search);
+                            tdp.mgui.searchBox.setVisible(true);
+                        } else {
+                            tdp.mgui.searchBox = null;
+                            tdp.mgui.searchBox = new JDialogSearchBox(tdp.getGUI().getFrame(), "Search Box", selectedMultiComponents, this);
 
+                        }
                     }
-                }
 
+                }
             }
-        }
 
 
-        //author:Huy TRUONG
-        //add component's value into list by clicking on component and holding Ctrl
-        if ((e.getButton() == MouseEvent.BUTTON1) && e.isControlDown()) {
-            tgc = tdp.componentPointed();
+            //author:Huy TRUONG
+            //add component's value into list by clicking on component and holding Ctrl
+            if ((e.getButton() == MouseEvent.BUTTON1) && e.isControlDown()) {
+                tgc = tdp.componentPointed();
 
-            //set text of seach field on menubar
-            tdp.mgui.getMainBar().setSearchText(tgc.getValue());
+                //set text of seach field on menubar
+                tdp.mgui.getMainBar().setSearchText(tgc.getValue());
 
-            if (null == tdp.mgui.searchBox || !tdp.mgui.searchBox.isShowing()) {
-                selectedMultiComponents.add(tgc.getValue());
-                //TraceManager.addDev("Selected components: " + selectedMultiComponents.toString());
-            } else {
-                if (tdp.mgui.searchBox.isShowing()) {
-                    tdp.mgui.searchBox.addValueListKeyword(tgc.getValue());
-                    selectedMultiComponents.clear();
-                } else {
+                if (null == tdp.mgui.searchBox || !tdp.mgui.searchBox.isShowing()) {
                     selectedMultiComponents.add(tgc.getValue());
-                    tdp.mgui.searchBox.removeValueListKeyword();
+                    //TraceManager.addDev("Selected components: " + selectedMultiComponents.toString());
+                } else {
+                    if (tdp.mgui.searchBox.isShowing()) {
+                        tdp.mgui.searchBox.addValueListKeyword(tgc.getValue());
+                        selectedMultiComponents.clear();
+                    } else {
+                        selectedMultiComponents.add(tgc.getValue());
+                        tdp.mgui.searchBox.removeValueListKeyword();
+                    }
                 }
-            }
-        } else
-            selectedMultiComponents.clear();
-        // clear the list when release Ctrl and click
+            } else
+                selectedMultiComponents.clear();
+            // clear the list when release Ctrl and click
 
 
-        //--
+            //--
 
 
-        if (tdp.mode == TDiagramPanel.SELECTED_COMPONENTS) {
-            if ((e.getClickCount() == 1) && (e.getButton() == MouseEvent.BUTTON1)) {
-                tdp.mode = TDiagramPanel.NORMAL;
-                tdp.mgui.setMode(MainGUI.CUTCOPY_KO);
-                tdp.mgui.setMode(MainGUI.EXPORT_LIB_KO);
-                tdp.getMainGUI().actions[TGUIAction.MOVE_ENABLED].setEnabled(false);
-                tdp.unselectSelectedComponents();
-                tdp.repaint();
+            if (tdp.mode == TDiagramPanel.SELECTED_COMPONENTS) {
+                if ((e.getClickCount() == 1) && (e.getButton() == MouseEvent.BUTTON1)) {
+                    tdp.mode = TDiagramPanel.NORMAL;
+                    tdp.mgui.setMode(MainGUI.CUTCOPY_KO);
+                    tdp.mgui.setMode(MainGUI.EXPORT_LIB_KO);
+                    tdp.getMainGUI().actions[TGUIAction.MOVE_ENABLED].setEnabled(false);
+                    tdp.unselectSelectedComponents();
+                    tdp.repaint();
+                }
+                return;
             }
-            return;
-        }
 
-        int selected = tdp.getGUI().getTypeButtonSelected();
-
-        if ((selected == TGComponentManager.EDIT) && (e.getClickCount() == 2) && (e.getButton() == MouseEvent.BUTTON1)) {
-            //TraceManager.addDev("Double click");
-            tgc = tdp.componentPointed();
-            if (tgc != null) {
-                //TraceManager.addDev("Component pointed: " + tgc.getName());
-                if (tgc.doubleClick(tdp.getGUI().getFrame(), e.getX(), e.getY())) {
-                    //TraceManager.addDev("Change4");
-                    tdp.getGUI().changeMade(tdp, TDiagramPanel.CHANGE_VALUE_COMPONENT);
-                    //TraceManager.addDev("repaint in mouse manager");
-                    tdp.repaint();
+            int selected = tdp.getGUI().getTypeButtonSelected();
+
+            if ((selected == TGComponentManager.EDIT) && (e.getClickCount() == 2) && (e.getButton() == MouseEvent.BUTTON1)) {
+                //TraceManager.addDev("Double click");
+                tgc = tdp.componentPointed();
+                if (tgc != null) {
+                    //TraceManager.addDev("Component pointed: " + tgc.getName());
+                    if (tgc.doubleClick(tdp.getGUI().getFrame(), e.getX(), e.getY())) {
+                        //TraceManager.addDev("Change4");
+                        tdp.getGUI().changeMade(tdp, TDiagramPanel.CHANGE_VALUE_COMPONENT);
+                        //TraceManager.addDev("repaint in mouse manager");
+                        tdp.repaint();
+                    }
                 }
             }
-        }
 
-        if ((selected == TGComponentManager.CONNECTOR) && (e.getClickCount() == 1) && (e.getButton() == MouseEvent.BUTTON1)) {
-            // if there is a close connecting point
-            if (tdp.mode == TDiagramPanel.ADDING_CONNECTOR) {
-                TGConnectingPoint p1;
-                p1 = tdp.getSelectedTGConnectingPoint();
-                if (p1 != null) {
-                    if ((p1 != cp) && (p1.isIn())) {
-                        tdp.finishAddingConnector(p1);
-                        tdp.mode = TDiagramPanel.NORMAL;
-                        tdp.getGUI().setEditMode();
-                        //TraceManager.addDev("Change3");
-                        tdp.getGUI().changeMade(tdp, TDiagramPanel.NEW_CONNECTOR);
+            if ((selected == TGComponentManager.CONNECTOR) && (e.getClickCount() == 1) && (e.getButton() == MouseEvent.BUTTON1)) {
+                // if there is a close connecting point
+                if (tdp.mode == TDiagramPanel.ADDING_CONNECTOR) {
+                    TGConnectingPoint p1;
+                    p1 = tdp.getSelectedTGConnectingPoint();
+                    if (p1 != null) {
+                        if ((p1 != cp) && (p1.isIn())) {
+                            tdp.finishAddingConnector(p1);
+                            tdp.mode = TDiagramPanel.NORMAL;
+                            tdp.getGUI().setEditMode();
+                            //TraceManager.addDev("Change3");
+                            tdp.getGUI().changeMade(tdp, TDiagramPanel.NEW_CONNECTOR);
+                            tdp.repaint();
+                        }
+                    } else {
+                        // no close connecting point -> adding point
+                        tdp.addPointToTGConnector(e.getX(), e.getY());
                         tdp.repaint();
                     }
+                }
+            }
+
+            if ((selected == TGComponentManager.CONNECTOR) && (e.getClickCount() == 2) && (e.getButton() == MouseEvent.BUTTON1)) {
+                if (tdp.mode == TDiagramPanel.ADDING_CONNECTOR) {
+                    tdp.mode = TDiagramPanel.NORMAL;
+                    tdp.stopAddingConnector(true);
+                    tdp.getGUI().setEditMode();
+                    tdp.repaint();
                 } else {
-                    // no close connecting point -> adding point
-                    tdp.addPointToTGConnector(e.getX(), e.getY());
+                    tdp.getGUI().setEditMode();
                     tdp.repaint();
                 }
             }
-        }
 
-        if ((selected == TGComponentManager.CONNECTOR) && (e.getClickCount() == 2) && (e.getButton() == MouseEvent.BUTTON1)) {
-            if (tdp.mode == TDiagramPanel.ADDING_CONNECTOR) {
-                tdp.mode = TDiagramPanel.NORMAL;
-                tdp.stopAddingConnector(true);
-                tdp.getGUI().setEditMode();
-                tdp.repaint();
-            } else {
+            if ((selected == TGComponentManager.COMPONENT) && (e.getButton() == MouseEvent.BUTTON1)) {
+                TGComponent comp = tdp.addComponent(e.getX(), e.getY(), true);
+                tdp.autoConnect(comp);
                 tdp.getGUI().setEditMode();
+                //TraceManager.addDev("change1");
+                tdp.getGUI().changeMade(tdp, TDiagramPanel.NEW_COMPONENT);
                 tdp.repaint();
             }
-        }
 
-        if ((selected == TGComponentManager.COMPONENT) && (e.getButton() == MouseEvent.BUTTON1)) {
-            TGComponent comp = tdp.addComponent(e.getX(), e.getY(), true);
-            tdp.autoConnect(comp);
-            tdp.getGUI().setEditMode();
-            //TraceManager.addDev("change1");
-            tdp.getGUI().changeMade(tdp, TDiagramPanel.NEW_COMPONENT);
-            tdp.repaint();
-        }
-
-        //If one click is done for selection
-        if ((selected == TGComponentManager.EDIT) && (e.getClickCount() == 1) && (e.getButton() == MouseEvent.BUTTON1)) {
-            setSelection(e.getX(), e.getY());
-            if (tdp.select)
-                tdp.mgui.actions[TGUIAction.ACT_DELETE].setEnabled(true);
-            else
-                tdp.mgui.actions[TGUIAction.ACT_DELETE].setEnabled(false);
+            //If one click is done for selection
+            if ((selected == TGComponentManager.EDIT) && (e.getClickCount() == 1) && (e.getButton() == MouseEvent.BUTTON1)) {
+                setSelection(e.getX(), e.getY());
+                if (tdp.select)
+                    tdp.mgui.actions[TGUIAction.ACT_DELETE].setEnabled(true);
+                else
+                    tdp.mgui.actions[TGUIAction.ACT_DELETE].setEnabled(false);
+            }
         }
     }
 
@@ -470,36 +483,38 @@ public class TDiagramMouseManager extends MouseAdapter {//implements MouseListen
      * @author Fabien Tessier
      */
     public void setSelection(int x, int y) {
-        tdp.requestFocusInWindow();
-        tdp.unselectClickSelectedComponents(); //Unselect all components
-        tgc = null;
-        for (TGComponent tgc : tdp.componentList) {
-            TGComponent tgcTmp = tgc.isOnMeHL(x, y);
-            if (tgcTmp != null && !tgcTmp.hidden) { //Component clicked
-                this.tgc = tgcTmp;
-                break;
+        if (isOn) {
+            tdp.requestFocusInWindow();
+            tdp.unselectClickSelectedComponents(); //Unselect all components
+            tgc = null;
+            for (TGComponent tgc : tdp.componentList) {
+                TGComponent tgcTmp = tgc.isOnMeHL(x, y);
+                if (tgcTmp != null && !tgcTmp.hidden) { //Component clicked
+                    this.tgc = tgcTmp;
+                    break;
+                }
             }
-        }
-        if (tgc != null) { //A component has been clicked
-            if (!(tgc instanceof TGConnector) && tgc.moveable)
-                tdp.getGUI().setMode(MainGUI.COMPONENT_SELECTED);
-            else
+            if (tgc != null) { //A component has been clicked
+                if (!(tgc instanceof TGConnector) && tgc.moveable)
+                    tdp.getGUI().setMode(MainGUI.COMPONENT_SELECTED);
+                else
+                    tdp.getGUI().setMode(MainGUI.OPENED);
+
+                //lastSelectedComponent = tgc;
+                tdp.setSelect(true);
+                tgc.singleClick(tdp.getGUI().getFrame(), x, y);
+            } else {
                 tdp.getGUI().setMode(MainGUI.OPENED);
+                tdp.setSelect(false);
+                // lastSelectedComponent = null;
+                tdp.componentPointed = null;
+            }
 
-            //lastSelectedComponent = tgc;
-            tdp.setSelect(true);
-            tgc.singleClick(tdp.getGUI().getFrame(), x, y);
-        } else {
-            tdp.getGUI().setMode(MainGUI.OPENED);
-            tdp.setSelect(false);
-            // lastSelectedComponent = null;
-            tdp.componentPointed = null;
-        }
-
-        // Issue #105: sending a change event prevents the undo from working
-        tdp.getGUI().changeMade(tdp, TDiagramPanel.SELECT_COMPONENT);
+            // Issue #105: sending a change event prevents the undo from working
+            tdp.getGUI().changeMade(tdp, TDiagramPanel.SELECT_COMPONENT);
 //        tdp.getGUI().changeMade(tdp, TDiagramPanel.CHANGE_VALUE_COMPONENT);
-        tdp.repaint();
+            tdp.repaint();
+        }
     }
 
     public void stopAddingConnector() {
@@ -543,106 +558,111 @@ public class TDiagramMouseManager extends MouseAdapter {//implements MouseListen
 
     @Override
     public void mouseMoved(MouseEvent e) {
-        //TraceManager.addDev("Mouse moved x=" + e.getX() + " y=" + e.getY());
-        tdp.currentX = e.getX();
-        tdp.currentY = e.getY();
+        if (isOn) {
+            //TraceManager.addDev("Mouse moved x=" + e.getX() + " y=" + e.getY());
+            tdp.currentX = e.getX();
+            tdp.currentY = e.getY();
 
-        int selected = tdp.getGUI().getTypeButtonSelected();
+            int selected = tdp.getGUI().getTypeButtonSelected();
 
-        if (tdp.mode == TDiagramPanel.SELECTED_COMPONENTS) {
-            if (tdp.showSelectionZone(e.getX(), e.getY())) {
-                tdp.repaint();
+            if (tdp.mode == TDiagramPanel.SELECTED_COMPONENTS) {
+                if (tdp.showSelectionZone(e.getX(), e.getY())) {
+                    tdp.repaint();
+                }
             }
-        }
 
-        if ((tdp.mode == TDiagramPanel.NORMAL) && (selected == TGComponentManager.EDIT)) {
-            //TraceManager.addDev("Pointed components?");
-            byte info = 0;
-            if (!tdp.isSelect())
-                info = tdp.highlightComponent(e.getX(), e.getY());
-            if (info > 1 || tdp.isSelect()) {
-                tgc = tdp.componentPointed();
-                //TraceManager.addDev("Components pointed: " + tgc);
-                if (tgc.isUserResizable()) {
-                    setCursor(tgc.getResizeZone(e.getX(), e.getY()));
+            if ((tdp.mode == TDiagramPanel.NORMAL) && (selected == TGComponentManager.EDIT)) {
+                //TraceManager.addDev("Pointed components?");
+                byte info = 0;
+                if (!tdp.isSelect())
+                    info = tdp.highlightComponent(e.getX(), e.getY());
+                if (info > 1 || tdp.isSelect()) {
+                    tgc = tdp.componentPointed();
+                    //TraceManager.addDev("Components pointed: " + tgc);
+                    if (tgc.isUserResizable()) {
+                        setCursor(tgc.getResizeZone(e.getX(), e.getY()));
+                    } else {
+                        tdp.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
+                    }
                 } else {
-                    tdp.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
+                    tdp.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
+                }
+                //TraceManager.addDev("info=" + info + " X=" + tdp.currentX + " Y=" + tdp.currentY);
+                if ((info == 1) || (info == 3)) {
+                    tdp.updateJavaCode();
+                    tdp.repaint();
+                } else if (info == 2) {
+                    if (tgc.hasAnUpdateOnPointedComponent()) {
+                        //TraceManager.addDev("has an update...");
+                        tdp.repaint();
+                    } else {
+                        //TraceManager.addDev("No update...");
+                    }
                 }
-            } else {
-                tdp.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
             }
-            //TraceManager.addDev("info=" + info + " X=" + tdp.currentX + " Y=" + tdp.currentY);
-            if ((info == 1) || (info == 3)) {
-                tdp.updateJavaCode();
-                tdp.repaint();
-            } else if (info == 2) {
-                if (tgc.hasAnUpdateOnPointedComponent()) {
-                    //TraceManager.addDev("has an update...");
+
+            if ((selected == TGComponentManager.CONNECTOR) && (tdp.mode == TDiagramPanel.NORMAL)) { // is connectingPointShow selected
+                if (tdp.highlightOutAndFreeConnectingPoint(e.getX(), e.getY(), tdp.getMGUI().getIdButtonSelected())) {
                     tdp.repaint();
-                } else {
-                    //TraceManager.addDev("No update...");
                 }
             }
-        }
 
-        if ((selected == TGComponentManager.CONNECTOR) && (tdp.mode == TDiagramPanel.NORMAL)) { // is connectingPointShow selected
-            if (tdp.highlightOutAndFreeConnectingPoint(e.getX(), e.getY(), tdp.getMGUI().getIdButtonSelected())) {
+            if ((selected == TGComponentManager.CONNECTOR) && (tdp.mode == TDiagramPanel.ADDING_CONNECTOR)) {
+                tdp.highlightInAndFreeConnectingPoint(e.getX(), e.getY(), tdp.getMGUI().getIdButtonSelected(), cp);
+                tdp.setAddingTGConnector(e.getX(), e.getY());
                 tdp.repaint();
             }
         }
-
-        if ((selected == TGComponentManager.CONNECTOR) && (tdp.mode == TDiagramPanel.ADDING_CONNECTOR)) {
-            tdp.highlightInAndFreeConnectingPoint(e.getX(), e.getY(), tdp.getMGUI().getIdButtonSelected(), cp);
-            tdp.setAddingTGConnector(e.getX(), e.getY());
-            tdp.repaint();
-        }
     }
 
     @Override
     public void mouseDragged(MouseEvent e) {
-        //TraceManager.addDev("Mode=" +tdp.mode);
+        if (isOn) {
 
-        if (tdp.mode == TDiagramPanel.MOVING_COMPONENT) {
-            tgc.setMoveCd(e.getX() - decx, e.getY() - decy);
-            tdp.repaint();
-            return;
-        }
+            //TraceManager.addDev("Mode=" +tdp.mode);
 
-        if (tdp.mode == TDiagramPanel.RESIZING_COMPONENT) {
-            applyResize(e.getX(), e.getY());
-            tdp.repaint();
-            return;
-        }
+            if (tdp.mode == TDiagramPanel.MOVING_COMPONENT) {
+                tgc.setMoveCd(e.getX() - decx, e.getY() - decy);
+                tdp.repaint();
+                return;
+            }
 
-        if (tdp.mode == TDiagramPanel.MOVING_SELECTED_COMPONENTS) {
-            tdp.moveSelected(e.getX() - decx, e.getY() - decy);
-            tdp.repaint();
-            return;
-        }
+            if (tdp.mode == TDiagramPanel.RESIZING_COMPONENT) {
+                applyResize(e.getX(), e.getY());
+                tdp.repaint();
+                return;
+            }
 
-        if (tdp.mode == TDiagramPanel.SELECTING_COMPONENTS) {
-            tdp.updateSelectingComponents(e.getX(), e.getY());
-            tdp.repaint();
+            if (tdp.mode == TDiagramPanel.MOVING_SELECTED_COMPONENTS) {
+                tdp.moveSelected(e.getX() - decx, e.getY() - decy);
+                tdp.repaint();
+                return;
+            }
 
-            return;
-        }
+            if (tdp.mode == TDiagramPanel.SELECTING_COMPONENTS) {
+                tdp.updateSelectingComponents(e.getX(), e.getY());
+                tdp.repaint();
 
-        if (tdp.mode == TDiagramPanel.MOVE_CONNECTOR_SEGMENT) {
-            cde[0].setCd(cde[0].getX() + e.getX() - decx, cde[0].getY() + e.getY() - decy);
-            cde[1].setCd(cde[1].getX() + e.getX() - decx, cde[1].getY() + e.getY() - decy);
-            decx = e.getX();
-            decy = e.getY();
-            tdp.repaint();
-        }
+                return;
+            }
 
-        if (tdp.mode == TDiagramPanel.MOVE_CONNECTOR_HEAD) {
-            tdp.setMovingHead(e.getX(), e.getY(), cde[1].getX(), cde[1].getY());
-            if (isOut) {
-                tdp.highlightOutAndFreeConnectingPoint(e.getX(), e.getY(), tgc.getType());
-            } else {
-                tdp.highlightInAndFreeConnectingPoint(e.getX(), e.getY(), tgc.getType(), cp);
+            if (tdp.mode == TDiagramPanel.MOVE_CONNECTOR_SEGMENT) {
+                cde[0].setCd(cde[0].getX() + e.getX() - decx, cde[0].getY() + e.getY() - decy);
+                cde[1].setCd(cde[1].getX() + e.getX() - decx, cde[1].getY() + e.getY() - decy);
+                decx = e.getX();
+                decy = e.getY();
+                tdp.repaint();
+            }
+
+            if (tdp.mode == TDiagramPanel.MOVE_CONNECTOR_HEAD) {
+                tdp.setMovingHead(e.getX(), e.getY(), cde[1].getX(), cde[1].getY());
+                if (isOut) {
+                    tdp.highlightOutAndFreeConnectingPoint(e.getX(), e.getY(), tgc.getType());
+                } else {
+                    tdp.highlightInAndFreeConnectingPoint(e.getX(), e.getY(), tgc.getType(), cp);
+                }
+                tdp.repaint();
             }
-            tdp.repaint();
         }
     }