diff --git a/src/main/java/view/FillingMouseListener.java b/src/main/java/view/DraggingListener.java
similarity index 75%
rename from src/main/java/view/FillingMouseListener.java
rename to src/main/java/view/DraggingListener.java
index a4946eb3188788e721932033b65154f418b8d41b..52e2e0b65475ec78c381a3180f4d6111993ce626 100644
--- a/src/main/java/view/FillingMouseListener.java
+++ b/src/main/java/view/DraggingListener.java
@@ -3,12 +3,12 @@ package view;
 import datastruct.Coordinate;
 import javafx.scene.input.MouseEvent;
 
-public class FillingMouseListener implements MouseListener {
+public class DraggingListener implements MouseListener {
     private final MatrixPane matrix;
     private final Coordinate source;
 
 
-    public FillingMouseListener(MatrixPane matrix, Coordinate source) {
+    public DraggingListener(MatrixPane matrix, Coordinate source) {
         this.matrix = matrix;
         this.source = source;
     }
@@ -29,9 +29,8 @@ public class FillingMouseListener implements MouseListener {
 
     @Override
     public void onMousePressed(MouseEvent event, Coordinate coordinate) {
-        this.matrix.getController().getSimulation().next(coordinate);
         this.matrix.setMouseListener(
-                new FillingMouseListener(this.matrix, coordinate)
+                new MousePressedListener(this.matrix, coordinate)
         );
     }
 
diff --git a/src/main/java/view/MatrixPane.java b/src/main/java/view/MatrixPane.java
index 050f73930aeb7f17b4b95ed8bb2ff3aec5f9dfda..2698eb0f4cf7fc09bef0b5c42ee22e3dd563b05e 100644
--- a/src/main/java/view/MatrixPane.java
+++ b/src/main/java/view/MatrixPane.java
@@ -8,6 +8,8 @@ import javafx.scene.layout.GridPane;
 import javafx.scene.paint.Color;
 import javafx.scene.shape.Rectangle;
 
+import java.util.List;
+
 /**
  * Created by Arnaud Labourel on 22/11/2018.
  */
@@ -62,7 +64,11 @@ public class MatrixPane extends GridPane {
                 event -> this.startFullDrag()
         );
         cellRectangle.addEventHandler(
-                MouseDragEvent.MOUSE_DRAG_RELEASED,
+                MouseEvent.MOUSE_CLICKED,
+                event -> mouseListener.onMouseClicked(event, coord)
+        );
+        cellRectangle.addEventHandler(
+                MouseDragEvent.MOUSE_RELEASED,
                 event -> mouseListener.onMouseReleased(event, coord)
         );
         cellRectangle.addEventHandler(
@@ -78,6 +84,8 @@ public class MatrixPane extends GridPane {
     }
 
     void resetWaitingListener() {
-        this.mouseListener = new WaitingMouseListener(this);
+        setMouseListener(new WaitingMouseListener(this));
     }
+
+
 }
diff --git a/src/main/java/view/MouseListener.java b/src/main/java/view/MouseListener.java
index 775cc91de92b1ca00c324365a04ecd53c0439cff..dfced33725dc602e538f5dfc3a8724707dcbc323 100644
--- a/src/main/java/view/MouseListener.java
+++ b/src/main/java/view/MouseListener.java
@@ -5,6 +5,7 @@ import javafx.scene.input.MouseEvent;
 
 interface MouseListener {
 
+    default void onMouseClicked(MouseEvent event, Coordinate coordinate) {}
     default void onMousePressed(MouseEvent event, Coordinate coordinate) {}
     default void onMouseReleased(MouseEvent event, Coordinate coordinate) {}
     default void onMouseEntered(MouseEvent event, Coordinate coordinate) {};
diff --git a/src/main/java/view/MousePressedListener.java b/src/main/java/view/MousePressedListener.java
new file mode 100644
index 0000000000000000000000000000000000000000..9664afe01f9ec6cfbd5d68d444978cb6ee99fcbf
--- /dev/null
+++ b/src/main/java/view/MousePressedListener.java
@@ -0,0 +1,35 @@
+package view;
+
+import datastruct.Coordinate;
+import javafx.scene.input.MouseEvent;
+
+public class MousePressedListener implements MouseListener {
+
+    private final Coordinate pressedCoordinate;
+    private final MatrixPane matrix;
+    public MousePressedListener(MatrixPane matrix, Coordinate coordinate) {
+        this.matrix = matrix;
+        this.pressedCoordinate = coordinate;
+    }
+
+    @Override
+    public void onMouseEntered(MouseEvent event, Coordinate coordinate) {
+        this.matrix.getController().getSimulation().copy(pressedCoordinate,coordinate);
+        this.matrix.setMouseListener(new DraggingListener(this.matrix, pressedCoordinate));
+    }
+
+    @Override
+    public void onMousePressed(MouseEvent event, Coordinate coordinate) {
+        this.matrix.setMouseListener(new MousePressedListener(this.matrix, coordinate));
+    }
+
+    @Override
+    public void onMouseReleased(MouseEvent event, Coordinate coordinate) {
+        if (coordinate.equals(pressedCoordinate)) {
+            this.matrix.getController().getSimulation().next(coordinate);
+        } else {
+            this.matrix.getController().getSimulation().copy(pressedCoordinate,coordinate);
+        }
+        this.matrix.resetWaitingListener();
+    }
+}
diff --git a/src/main/java/view/WaitingMouseListener.java b/src/main/java/view/WaitingMouseListener.java
index 68601debb4757abdd55450b8b6d58f16ff5e8ba3..25055629e8636ab141e95614bb3dc9a0e2ba1e14 100644
--- a/src/main/java/view/WaitingMouseListener.java
+++ b/src/main/java/view/WaitingMouseListener.java
@@ -14,8 +14,7 @@ class WaitingMouseListener implements MouseListener {
 
     @Override
     public void onMousePressed(MouseEvent event, Coordinate coordinate) {
-        this.matrix.getController().getSimulation().next(coordinate);
-        this.matrix.setMouseListener(new FillingMouseListener(this.matrix, coordinate));
+        this.matrix.setMouseListener(new MousePressedListener(this.matrix, coordinate));
     }