diff --git a/src/main/java/engine/Kernel.java b/src/main/java/engine/Kernel.java
index 7a13747bbde5e25c9486da64f957d521ebf23cc7..aaeb8735284f52bf962a9ba05a504447e44313ba 100644
--- a/src/main/java/engine/Kernel.java
+++ b/src/main/java/engine/Kernel.java
@@ -16,29 +16,23 @@ import java.util.Random;
 
 public class Kernel {
 
-    ArrayList<Engine> engines = new ArrayList<Engine>();
-    GraphicEngine graphicEngine;
-
-    //public HashMap<PongObject, ImageComponent> pongObjectImageComponentHashMap = new HashMap<>();
-
+    ArrayList<Engine> engines = new ArrayList<>();
     public static ArrayList<PongObject> gameObjects;
-    public HashMap<PongObject, Entity> pongObjectEntityHashMap = new HashMap<>();
+
     Movable movable;
 
     public Kernel(String gameName, int width, int height, ArrayList<PongObject> gameObjects) throws IOException {
-
         this.setGameObject(gameObjects);
         System.out.println("Model created");
 
-        this.graphicEngine = new GraphicEngine(); // Will create a new grid and a new kernel
-        graphicEngine.init(gameName, width, height); // Will start the kernel and set the keys listeners
-
-        engines.add(this.graphicEngine);//
+        GraphicEngine graphicEngine = new GraphicEngine();
+        graphicEngine.init(gameName, width, height);
 
-        engines.add(new PhysicEngine());
+        engines.add(graphicEngine); //Adding graphic engine
+        engines.add(new PhysicEngine()); //Adding physic engine
 
         this.start();
-        this.setKeysListeners((JPanel) this.graphicEngine.getContentPane());
+        this.setKeysListeners((JPanel) graphicEngine.getContentPane());
     }
 
     /**
@@ -47,11 +41,10 @@ public class Kernel {
      * @throws IOException
      */
     public void start() throws IOException {
-        Random random = new Random(); // For random speed
-
-
-        graphicEngine.update();
-
+        for (Engine engine: engines
+        ) {
+            engine.update();
+        }
     }
 
 
@@ -60,15 +53,10 @@ public class Kernel {
      */
     public void update() {
         System.out.println("One step");
-        // Updating all objects positions
-
         for (Engine engine: engines
              ) {
             engine.update();
         }
-        // Repainting the grid
-        graphicEngine.repaint();
-        graphicEngine.revalidate();
     }
 
     /**
@@ -78,7 +66,6 @@ public class Kernel {
         mainPanel.addKeyListener(new java.awt.event.KeyAdapter() {
             public void keyPressed(java.awt.event.KeyEvent evt) {
                 switch (evt.getKeyCode()) {
-                    // J'ai essayƩ mais je me perds pour gerer les debordements
                     case java.awt.event.KeyEvent.VK_UP -> {
                         movable.setSpeed(new Coordinates2D(0, -1));
                     }
diff --git a/src/main/java/engine/graphic/GraphicEngine.java b/src/main/java/engine/graphic/GraphicEngine.java
index c284e0a37c1a90fbe5fb0fc5783f640a0b3297f5..f78e8cb320cb71b68b4cf57da1a1a56484b0e2f8 100644
--- a/src/main/java/engine/graphic/GraphicEngine.java
+++ b/src/main/java/engine/graphic/GraphicEngine.java
@@ -40,8 +40,9 @@ public class GraphicEngine extends JFrame implements Engine {
             } catch (IOException e) {
                 throw new RuntimeException(e);
             }
-
         }
+        repaint();
+        revalidate();
     }
 
 
diff --git a/src/main/java/engine/physic/Entity.java b/src/main/java/engine/physic/Entity.java
index 578ef153cc30fde9863c5f894043886f1046aacd..9b1fd46dcfa9ff995df296cd3bf0d41a796773dd 100644
--- a/src/main/java/engine/physic/Entity.java
+++ b/src/main/java/engine/physic/Entity.java
@@ -78,4 +78,7 @@ public interface Entity {
      */
     public void halt();
 
+    int getWidth();
+
+    int getHeight();
 }
diff --git a/src/main/java/engine/physic/Movable.java b/src/main/java/engine/physic/Movable.java
index beb4b7ecde76179b66eb8d49a5bae2da93961bcb..b62d88a86e2f5ccb856773fcfd62dd27f5376c28 100644
--- a/src/main/java/engine/physic/Movable.java
+++ b/src/main/java/engine/physic/Movable.java
@@ -97,4 +97,14 @@ public class Movable implements Entity {
         }
 
     }
+
+    @Override
+    public int getWidth() {
+        return width;
+    }
+
+    @Override
+    public int getHeight() {
+        return height;
+    }
 }
diff --git a/src/main/java/engine/physic/NotMovable.java b/src/main/java/engine/physic/NotMovable.java
index f6ecdb13bad69cf8c20cd0de4f066fd4af69e056..8b7e9aaa853e4dccc672dbc17c05e5a41c3fceea 100644
--- a/src/main/java/engine/physic/NotMovable.java
+++ b/src/main/java/engine/physic/NotMovable.java
@@ -68,4 +68,14 @@ public class NotMovable implements Entity {
 
     }
 
+    @Override
+    public int getWidth() {
+        return 0;
+    }
+
+    @Override
+    public int getHeight() {
+        return 0;
+    }
+
 }
diff --git a/src/main/java/engine/physic/PhysicEngine.java b/src/main/java/engine/physic/PhysicEngine.java
index 0261f5a791b480cfcead01ab77cdedc5b437d283..64ac67034aa26fdb99a7e5c5d57dd54ebe414349 100644
--- a/src/main/java/engine/physic/PhysicEngine.java
+++ b/src/main/java/engine/physic/PhysicEngine.java
@@ -9,6 +9,8 @@ import java.util.HashMap;
 
 public class PhysicEngine implements Engine {
     public HashMap<PongObject, Entity> pongObjectEntityHashMap = new HashMap<>();
+
+    private HashMap<Coordinates2D, PongObject> positions = new HashMap<>();
     public PhysicEngine(){
         for (PongObject pongObject: Kernel.gameObjects) {
             Coordinates2D speed = new Coordinates2D(0, 0);
@@ -17,7 +19,7 @@ public class PhysicEngine implements Engine {
             }
             //Coordinates2D speed = new Coordinates2D(random.nextInt(2) - 1, random.nextInt(2) - 1);
             pongObjectEntityHashMap.put(pongObject, new Movable(1, pongObject.getPosition(), speed, new Coordinates2D(0, 0), pongObject.getWidth(), pongObject.getHeight()));
-
+            positions.put(pongObject.getPosition(), pongObject);
 
         }
     }
@@ -25,7 +27,13 @@ public class PhysicEngine implements Engine {
     public void update(){
         for (PongObject pongObject: Kernel.gameObjects) {
             pongObjectEntityHashMap.get(pongObject).updatePosition(); // Updating of the associated movable position
+            //checkCollision();
             pongObject.setPosition(pongObjectEntityHashMap.get(pongObject).getPosition()); // Updating of the pong object position
         }
     }
+
+    public void checkCollision(Entity firstObject, Entity secondObject){
+        //TODO: check collision between two objects
+    }
+
 }
diff --git a/src/main/java/pong/PongApp.java b/src/main/java/pong/PongApp.java
index 5040f2d72d9fe16cd8e4debf9abcbbb1a865f86d..3a4d16043fa8bfe3c461ebd7d08d98c140dff06a 100644
--- a/src/main/java/pong/PongApp.java
+++ b/src/main/java/pong/PongApp.java
@@ -30,10 +30,11 @@ public class PongApp {
         Kernel kernel = new Kernel("Pong", width, height, components);
         //kernel.setGameObject(components);
 
+
         while(true){
             try {
                 kernel.update();
-                Thread.sleep(10);
+                Thread.sleep(1);
             } catch (InterruptedException e) {
                 e.printStackTrace();
             }