diff --git a/src/main/java/ui/ActionPerformer.java b/src/main/java/ui/ActionPerformer.java
index 5231d5e80f734f92df76c0042e31969da5bf37ab..a5d757268224fbd3835baffdeb24ebc8d6563bf0 100755
--- a/src/main/java/ui/ActionPerformer.java
+++ b/src/main/java/ui/ActionPerformer.java
@@ -1026,5 +1026,14 @@ public class ActionPerformer {
         }   else if (command.endsWith(".dot")) {
             mgui.viewAutomata(command);
         }
+        else if (command.equals(mgui.actions[TGUIAction.ACT_UP].getActionCommand())) {
+            tdp1.upComponent();
+        }	else if (command.equals(mgui.actions[TGUIAction.ACT_DOWN].getActionCommand())) {
+            	tdp1.downComponent();
+        }	else if (command.equals(mgui.actions[TGUIAction.ACT_LEFT].getActionCommand())) {
+            tdp1.leftComponent();
+        } 	else if (command.equals(mgui.actions[TGUIAction.ACT_RIGHT].getActionCommand())) {
+            tdp1.rightComponent();
+        }
     }
 }
diff --git a/src/main/java/ui/ArrowListener.java b/src/main/java/ui/ArrowListener.java
new file mode 100644
index 0000000000000000000000000000000000000000..fcc6d77c11fe802171db2663a8498ed824712f4b
--- /dev/null
+++ b/src/main/java/ui/ArrowListener.java
@@ -0,0 +1,37 @@
+package ui;
+
+import java.awt.event.KeyEvent;
+import java.awt.event.KeyListener;
+
+public class ArrowListener implements KeyListener {
+	
+	private TDiagramPanel tdp;
+	
+	public ArrowListener(TDiagramPanel t) {
+		tdp = t;
+	}
+
+	@Override
+	public void keyPressed(KeyEvent arg0) {
+		if (arg0.getKeyCode() == KeyEvent.VK_UP)
+			tdp.upComponent();
+		if (arg0.getKeyCode() == KeyEvent.VK_DOWN)
+			tdp.downComponent();
+		if (arg0.getKeyCode() == KeyEvent.VK_LEFT)
+			tdp.leftComponent();
+		if (arg0.getKeyCode() == KeyEvent.VK_RIGHT)
+			tdp.rightComponent();			
+	}
+
+	@Override
+	public void keyReleased(KeyEvent arg0) {
+		// TODO Auto-generated method stub
+		
+	}
+
+	@Override
+	public void keyTyped(KeyEvent arg0) {
+		
+	}
+
+}
diff --git a/src/main/java/ui/JMenuBarTurtle.java b/src/main/java/ui/JMenuBarTurtle.java
index 8e2c0d40d910a76e5d95c8001d06ebf9753bbcc2..16e8753f8109b660657c97e549b59cfefc7f14ec 100755
--- a/src/main/java/ui/JMenuBarTurtle.java
+++ b/src/main/java/ui/JMenuBarTurtle.java
@@ -173,6 +173,14 @@ public  class JMenuBarTurtle extends JMenuBar   {
         menuItem.addMouseListener(mgui.mouseHandler);
         menuItem = edit.add(mgui.actions[TGUIAction.ACT_SUPPR]);
         menuItem.addMouseListener(mgui.mouseHandler);
+        menuItem = edit.add(mgui.actions[TGUIAction.ACT_UP]);
+        menuItem.addMouseListener(mgui.mouseHandler);
+        menuItem = edit.add(mgui.actions[TGUIAction.ACT_DOWN]);
+        menuItem.addMouseListener(mgui.mouseHandler);
+        menuItem = edit.add(mgui.actions[TGUIAction.ACT_RIGHT]);
+        menuItem.addMouseListener(mgui.mouseHandler);
+        menuItem = edit.add(mgui.actions[TGUIAction.ACT_LEFT]);
+        menuItem.addMouseListener(mgui.mouseHandler);
 
         edit.addSeparator();
 
diff --git a/src/main/java/ui/JToolBarMainTurtle.java b/src/main/java/ui/JToolBarMainTurtle.java
index 40be8381c2d4e8452fd0093f08db7b26cb917d30..92b08986e8523b8cf8fcb0460d9ceeeea8d5ceaf 100755
--- a/src/main/java/ui/JToolBarMainTurtle.java
+++ b/src/main/java/ui/JToolBarMainTurtle.java
@@ -107,7 +107,13 @@ public  class JToolBarMainTurtle extends JToolBar implements ActionListener
         button.addMouseListener(mgui.mouseHandler);
         button = add(mgui.actions[TGUIAction.ACT_DELETE]);
         button.addMouseListener(mgui.mouseHandler);
-        button = add(mgui.actions[TGUIAction.ACT_SUPPR]);
+        button = add(mgui.actions[TGUIAction.ACT_UP]);
+        button.addMouseListener(mgui.mouseHandler);
+        button = add(mgui.actions[TGUIAction.ACT_DOWN]);
+        button.addMouseListener(mgui.mouseHandler);
+        button = add(mgui.actions[TGUIAction.ACT_RIGHT]);
+        button.addMouseListener(mgui.mouseHandler);
+        button = add(mgui.actions[TGUIAction.ACT_LEFT]);
         button.addMouseListener(mgui.mouseHandler);
 
         addSeparator();
diff --git a/src/main/java/ui/ModeManager.java b/src/main/java/ui/ModeManager.java
index 7838577a0f2148c0868314279b789afd80cd8231..fb11391da3bdbcb805540c47e823de29ff1cfcd4 100755
--- a/src/main/java/ui/ModeManager.java
+++ b/src/main/java/ui/ModeManager.java
@@ -121,6 +121,10 @@ public class ModeManager {
             actions[TGUIAction.ACT_GENERATE_ONTOLOGIES_ALL_DIAGRAMS].setEnabled(true);
             actions[TGUIAction.ACT_DELETE].setEnabled(true);
             actions[TGUIAction.ACT_SUPPR].setEnabled(true);
+            actions[TGUIAction.ACT_UP].setEnabled(true);
+            actions[TGUIAction.ACT_DOWN].setEnabled(true);
+            actions[TGUIAction.ACT_LEFT].setEnabled(true);
+            actions[TGUIAction.ACT_RIGHT].setEnabled(true);
             
             if (mainBar != null) {
                 mainBar.activateSearch(true);
diff --git a/src/main/java/ui/TDiagramMouseManager.java b/src/main/java/ui/TDiagramMouseManager.java
index c5ad2a57ebc3d9e50b632c2b08e2616a02d30e29..43df70d235337a2e78fd2a0cffb0912c30fa6404 100755
--- a/src/main/java/ui/TDiagramMouseManager.java
+++ b/src/main/java/ui/TDiagramMouseManager.java
@@ -41,8 +41,6 @@ package ui;
 import ui.window.JDialogSearchBox;
 
 import java.awt.*;
-import java.awt.event.KeyEvent;
-import java.awt.event.KeyListener;
 import java.awt.event.MouseAdapter;
 import java.awt.event.MouseEvent;
 import java.util.ArrayList;
@@ -276,6 +274,7 @@ public class TDiagramMouseManager extends MouseAdapter {//implements MouseListen
                 //System.out.println("change2");
                 tdp.getGUI().changeMade(tdp, TDiagramPanel.MOVE_COMPONENT);
             }
+            setSelection(e.getX(), e.getY());
         }
 
         if (tdp.mode == TDiagramPanel.RESIZING_COMPONENT) {
@@ -461,7 +460,7 @@ public class TDiagramMouseManager extends MouseAdapter {//implements MouseListen
        
         //If one click is done for selection
         if ((selected == TGComponentManager.EDIT) && (e.getClickCount() == 1) && (e.getButton() == MouseEvent.BUTTON1)) {
-    	    setSelection(e.getX(), e.getY());
+        	setSelection(e.getX(), e.getY());
         }
     }
 
@@ -469,7 +468,8 @@ public class TDiagramMouseManager extends MouseAdapter {//implements MouseListen
      * Set the selection on the clicked component
      * @author Fabien Tessier
      */
-    public void setSelection(int x, int y) {
+    private void setSelection(int x, int y) {
+    	tdp.requestFocusInWindow();
     	tdp.unselectClickSelectedComponents(); //Unselect all components
  	    tgc = null;
  	    for (TGComponent tgc: tdp.componentList) {
diff --git a/src/main/java/ui/TDiagramPanel.java b/src/main/java/ui/TDiagramPanel.java
index 28d1d714911ba5f6acf8860a33f75e78516de726..d48f476bfd5c53011bdf378de10b67a6f360f8a7 100755
--- a/src/main/java/ui/TDiagramPanel.java
+++ b/src/main/java/ui/TDiagramPanel.java
@@ -87,6 +87,7 @@ import java.util.List;
 public abstract class TDiagramPanel extends JPanel implements GenericTree {
 
     protected TDiagramMouseManager tdmm;
+    protected ArrowListener al;
 
     // for tracking changes
     public static final int NEW_COMPONENT = 0;
@@ -111,7 +112,6 @@ public abstract class TDiagramPanel extends JPanel implements GenericTree {
     protected TGConnectingPoint selectedConnectingPoint;
     protected CAMSConnectingPoint selectedCAMSConnectingPoints;
     protected TGComponent componentPointed;
-    protected TGComponent lastClickComponent = null;
     protected TGComponent componentPopup;
     protected TToolBar ttb;
     protected TGComponent fatherOfRemoved;
@@ -235,11 +235,14 @@ public abstract class TDiagramPanel extends JPanel implements GenericTree {
 
 
     public boolean drawable = true;
+    public static final int MOVE_SPEED = 3;
     
 
 
     // Constructor
     public TDiagramPanel(MainGUI _mgui, TToolBar _ttb) {
+    	UIManager.getDefaults().put("ScrollPane.ancestorInputMap", 
+    			new UIDefaults.LazyInputMap(new Object[] {}));
         setBackground(ColorManager.DIAGRAM_BACKGROUND);
         //setBackground(Color.red);
         //setMinimumSize(new Dimension(1000, 1000));
@@ -253,11 +256,15 @@ public abstract class TDiagramPanel extends JPanel implements GenericTree {
         tdmm = new TDiagramMouseManager(this);
         addMouseListener(tdmm);
         addMouseMotionListener(tdmm);
+        
+        al = new ArrowListener(this);
+        addKeyListener(al);
+        
+        setFocusable(true);
 
         buildPopupMenus();
     }
-
-
+    
     // Abstract operations
     public abstract boolean actionOnDoubleClick(TGComponent tgc);
     public abstract boolean actionOnAdd(TGComponent tgc);
@@ -3406,4 +3413,36 @@ public abstract class TDiagramPanel extends JPanel implements GenericTree {
     public void setSelect(boolean b) {
     	select = b;
     }
+    
+    public void upComponent() {
+    	TGComponent tgc = componentPointed;
+    	if (tgc != null && tgc.moveable) {
+    		tgc.setMoveCd(tgc.x, tgc.y - MOVE_SPEED);
+    		repaint();
+    	}
+    }
+    
+    public void downComponent() {
+    	TGComponent tgc = componentPointed;
+    	if (tgc != null && tgc.moveable) {
+    		tgc.setMoveCd(tgc.x, tgc.y + MOVE_SPEED);
+    		repaint();
+    	}
+    }
+    
+    public void leftComponent() {
+    	TGComponent tgc = componentPointed;
+    	if (tgc != null && tgc.moveable) {
+    		tgc.setMoveCd(tgc.x - MOVE_SPEED, tgc.y);
+    		repaint();
+    	}
+    }
+    
+    public void rightComponent() {
+    	TGComponent tgc = componentPointed;
+    	if (tgc != null && tgc.moveable) {
+    		tgc.setMoveCd(tgc.x + MOVE_SPEED, tgc.y);
+    		repaint();
+    	}
+    }
 }
diff --git a/src/main/java/ui/TGComponent.java b/src/main/java/ui/TGComponent.java
index 7d927979f8bb0bce1e24ab282102aee1c49fc09a..10575a4063f50febc27f306f3ff35b4d034eb4c8 100755
--- a/src/main/java/ui/TGComponent.java
+++ b/src/main/java/ui/TGComponent.java
@@ -2732,16 +2732,10 @@ public abstract class TGComponent implements CDElement, GenericTree {
      * Highlight the selected component
      * @author Fabien Tessier
      */
-    public final boolean singleClick(JFrame frame, int x, int y)
+    public final void singleClick(JFrame frame, int x, int y)
     {
-    	boolean b = true;
     	isSelect = true;
-    	tdp.highlightComponent(x, y);
-    	if (moveable) {
-    		
-    	}
-    	
-    	return b;
+    	tdp.highlightComponent(x, y); 
     }
     
     public final void actionOnRemove(){
diff --git a/src/main/java/ui/TGUIAction.java b/src/main/java/ui/TGUIAction.java
index 78c760074ac7ba3b7b1590d3491a95e96b67bf2e..000a9814ab18250bc9f88cfd9b38cfad8be92154 100755
--- a/src/main/java/ui/TGUIAction.java
+++ b/src/main/java/ui/TGUIAction.java
@@ -551,7 +551,7 @@ public class TGUIAction extends AbstractAction {
     public static final int ACT_COPY = 45;
     public static final int ACT_PASTE = 46;
     public static final int ACT_DELETE = 47;
-    public static final int ACT_SUPPR = 462; //Last added input
+    public static final int ACT_SUPPR = 462;
 
     public static final int ACT_ZOOM_MORE = 235;
     public static final int ACT_ZOOM_LESS = 236;
@@ -615,7 +615,12 @@ public class TGUIAction extends AbstractAction {
     public static final int ACT_INTERNAL_SEARCH = 415;
     //--
 
-    public static final int NB_ACTION = 463;
+    public static final int ACT_UP = 463;
+    public static final int ACT_DOWN = 464;
+    public static final int ACT_LEFT = 465;
+    public static final int ACT_RIGHT = 466;
+    
+    public static final int NB_ACTION = 467;
 
     private static final TAction [] actions = new TAction[NB_ACTION];
 
@@ -652,7 +657,10 @@ public class TGUIAction extends AbstractAction {
             if (actions[id].hasControl) {
                 putValue(Action.ACCELERATOR_KEY, KeyStroke.getKeyStroke(actions[id].KEY, java.awt.event.InputEvent.CTRL_MASK));
             } else {
-                putValue(Action.ACCELERATOR_KEY, KeyStroke.getKeyStroke(actions[id].KEY));
+            	if (actions[id].MNEMONIC_KEY >= 500 && actions[id].MNEMONIC_KEY <= 503)
+            		putValue(Action.ACCELERATOR_KEY, KeyStroke.getKeyStroke(actions[id].ACTION_COMMAND_KEY));
+            	else
+            		putValue(Action.ACCELERATOR_KEY, KeyStroke.getKeyStroke(actions[id].KEY));
             }
         }
         putValue(Action.ACTION_COMMAND_KEY, actions[id].ACTION_COMMAND_KEY);
@@ -1224,7 +1232,10 @@ public class TGUIAction extends AbstractAction {
         actions[ACT_GENERATE_ONTOLOGIES_CURRENT_SET_OF_DIAGRAMS] = new TAction("generate-ontology-current-set-of-diagrams", "Generate ontology (current set of diagrams)", IconManager.imgic338, IconManager.imgic339, "Generate ontology (current set of diagrams)",  "Generate the ontology for the current set of diagrams under edition", 0);
         actions[ACT_GENERATE_ONTOLOGIES_ALL_DIAGRAMS] = new TAction("generate-ontology-all-diagrams", "Generate ontology (all diagrams)", IconManager.imgic338, IconManager.imgic339, "Generate ontology (all diagrams)",  "Generate the ontology for the diagrams under edition", 0);
 
-
+        actions[ACT_UP] = new TAction("UP", "Up", IconManager.imgic78, IconManager.imgic78, "Up", "Up", 500);
+        actions[ACT_DOWN] = new TAction("DOWN", "Down", IconManager.imgic79, IconManager.imgic79, "Down", "Down", 501);
+        actions[ACT_RIGHT] = new TAction("RIGHT", "Right", IconManager.imgic780, IconManager.imgic780, "Right", "Right", 502);
+        actions[ACT_LEFT] = new TAction("LEFT", "Left", IconManager.imgic790, IconManager.imgic790, "Left", "Left", 503);
     }
 
 
diff --git a/src/main/java/ui/util/IconManager.java b/src/main/java/ui/util/IconManager.java
index 2af58c41e42580c510d0e746ee91215d07711c73..4c9f0c226fa1b54cb87473b2c38ecb7e2221ccfd 100755
--- a/src/main/java/ui/util/IconManager.java
+++ b/src/main/java/ui/util/IconManager.java
@@ -71,7 +71,7 @@ public class IconManager {
     public static ImageIcon imgic40, imgic41, imgic42, imgic43, imgic44, imgic45, imgic46, imgic47, imgic48, imgic49;
     public static ImageIcon imgic50, imgic51, imgic52, imgic53, imgic54, imgic55, imgic56, imgic57, imgic58, imgic59;
     public static ImageIcon imgic60, imgic61, imgic62, imgic63, imgic64, imgic65, imgic66, imgic68;
-    public static ImageIcon imgic70, imgic71, imgic72, imgic73, imgic75, imgic76, imgic77, imgic78, imgic79;
+    public static ImageIcon imgic70, imgic71, imgic72, imgic73, imgic75, imgic76, imgic77, imgic78, imgic79, imgic780, imgic790;
     public static ImageIcon imgic80, imgic82, imgic84, imgic86, imgic88, imgic89;
     public static ImageIcon imgic90, imgic92, imgic94, imgic96, imgic98, imgic99;
 
@@ -254,6 +254,8 @@ public class IconManager {
     private static String icon77 = "toolbarButtonGraphics/general/Preferences24.gif";
     private static String icon78 = "toolbarButtonGraphics/navigation/Up16.gif";
     private static String icon79 = "toolbarButtonGraphics/navigation/Down16.gif";
+    private static String icon780 = "toolbarButtonGraphics/navigation/Right16.gif";
+    private static String icon790 = "toolbarButtonGraphics/navigation/Left16.gif";
 
 
     private static String icon80 = "avatarbd.gif";
@@ -727,6 +729,8 @@ public class IconManager {
         imgic77 = getIcon(icon77);
         imgic78 = getIcon(icon78);
         imgic79 = getIcon(icon79);
+        imgic780 = getIcon(icon780);
+        imgic790 = getIcon(icon790);
 
         imgic80 = getIcon(icon80);
         imgic82 = getIcon(icon82);
diff --git a/src/main/resources/ui/util/toolbarButtonGraphics/navigation/Left16.gif b/src/main/resources/ui/util/toolbarButtonGraphics/navigation/Left16.gif
new file mode 100644
index 0000000000000000000000000000000000000000..6a7424d87db7ebb22e07cc6d813aa16e4d2c483f
Binary files /dev/null and b/src/main/resources/ui/util/toolbarButtonGraphics/navigation/Left16.gif differ
diff --git a/src/main/resources/ui/util/toolbarButtonGraphics/navigation/Right16.gif b/src/main/resources/ui/util/toolbarButtonGraphics/navigation/Right16.gif
new file mode 100644
index 0000000000000000000000000000000000000000..af8b908ed29873ea5f486ae153abd75bec50090d
Binary files /dev/null and b/src/main/resources/ui/util/toolbarButtonGraphics/navigation/Right16.gif differ